Advanced Array-Based Problem-Solving with LeetCode Examples in Go-Part-2.

Learner, Love to make things simple, Full Stack Developer, StackOverflower, Passionate about using machine learning, deep learning and AI
Search for a command to run...

Learner, Love to make things simple, Full Stack Developer, StackOverflower, Passionate about using machine learning, deep learning and AI
No comments yet. Be the first to comment.
Move beyond traditional RESTful thinking. Learn how to design APIs specifically for MCP (Model Context Protocol) servers. This guide covers the shift in mindset, a practical OpenAPI 3.1 example, and a Spring Boot implementation to make your services ...

Extending Kestra to Every Corner of Your Data Stack. Introduction: The Power of Plugins Imagine you're a master chef. You don't just have one knife - you have specialized tools for every task: a paring knife for delicate work, a chef's knife for chop...
Mastering Complex Orchestration Scenarios. Introduction: The Orchestrator's Toolkit Imagine you're conducting a symphony. You don't just wave your baton - you cue sections, adjust tempo, handle surprises, and ensure harmony. That's what advanced work...
From Data Extraction to Loading - A Practical Guide Introduction: Why ETL Still Matters in the Modern Data Stack Remember when data engineering was "extract, transform, load"? Some say ETL is dead, replaced by ELT, reverse ETL, and data mesh. But her...
Building Blocks of Declarative Orchestration. Introduction: The Power of Simplicity Imagine trying to build a house without understanding bricks, beams, and blueprints. That's what using an orchestration tool without understanding its core concepts f...
Problem Statement: You are given an array prices where prices[i] is the price of a given stock on the i-th day. Find the maximum profit you can achieve by buying and selling stocks multiple times. You may complete as many transactions as you like, but you must sell the stock before you buy again.
Solution:
func maxProfit(prices []int) int {
maxProfit := 0
for i := 1; i < len(prices); i++ {
if prices[i] > prices[i-1] {
maxProfit += prices[i] - prices[i-1]
}
}
return maxProfit
}
Problem Statement: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of the line i are at (i, ai) and (i, 0). Find two lines, which, together with the x-axis, forms a container that holds the most water.
Solution:
func maxArea(height []int) int {
maxArea, left, right := 0, 0, len(height)-1
for left < right {
currentArea := min(height[left], height[right]) * (right - left)
maxArea = max(maxArea, currentArea)
if height[left] < height[right] {
left++
} else {
right--
}
}
return maxArea
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
Problem Statement: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise).
Solution:
func rotate(matrix [][]int) {
n := len(matrix)
for i := 0; i < n/2; i++ {
for j := i; j < n-i-1; j++ {
temp := matrix[i][j]
matrix[i][j] = matrix[n-1-j][i]
matrix[n-1-j][i] = matrix[n-1-i][n-1-j]
matrix[n-1-i][n-1-j] = matrix[j][n-1-i]
matrix[j][n-1-i] = temp
}
}
}
Problem Statement: You are given an array of non-negative integers nums, where each element represents your maximum jump length at that position. Determine if you can reach the last index.
Solution:
func canJump(nums []int) bool {
lastPos := len(nums) - 1
for i := len(nums) - 1; i >= 0; i-- {
if i+nums[i] >= lastPos {
lastPos = i
}
}
return lastPos == 0
}
Problem Statement: Given an array of n intervals where intervals[i] = [starti, endi], merge all overlapping intervals and return an array of the non-overlapping intervals that cover all the intervals in the input.
Solution:
func merge(intervals [][]int) [][]int {
sort.Slice(intervals, func(i, j int) bool {
return intervals[i][0] < intervals[j][0]
})
merged := [][]int{}
for _, interval := range intervals {
if len(merged) == 0 || merged[len(merged)-1][1] < interval[0] {
merged = append(merged, interval)
} else {
merged[len(merged)-1][1] = max(merged[len(merged)-1][1], interval[1])
}
}
return merged
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
Problem Statement: Implement nextPermutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
Solution:
func nextPermutation(nums []int) {
i := len(nums) - 2
for i >= 0 && nums[i] >= nums[i+1] {
i--
}
if i >= 0 {
j := len(nums) - 1
for j >= 0 && nums[j] <= nums[i] {
j--
}
nums[i], nums[j] = nums[j], nums[i]
}
reverse(nums[i+1:])
}
func reverse(nums []int) {
left, right := 0, len(nums)-1
for left < right {
nums[left], nums[right] = nums[right], nums[left]
left++
right--
}
}
Problem Statement: Given an m x n matrix, return all elements of the matrix in spiral order.
Solution:
func spiralOrder(matrix [][]int) []int {
var result []int
m, n := len(matrix), len(matrix[0])
top, bottom, left, right := 0, m-1, 0, n-1
for len(result) < m*n {
for i := left; i <= right && len(result) < m*n; i++ {
result = append(result, matrix[top][i])
}
top++
for i := top; i <= bottom && len(result) < m*n; i++ {
result = append(result, matrix[i][right])
}
right--
for i := right; i >= left && len(result) < m*n; i-- {
result = append(result, matrix[bottom][i])
}
bottom--
for i := bottom; i >= top && len(result) < m*n; i-- {
result = append(result, matrix[i][left])
}
left++
}
return result
}
Problem Statement: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. You are given a target value to search. If found in the array, return its index; otherwise, return -1.
Solution:
func search(nums []int, target int) int {
left, right := 0, len(nums)-1
for left <= right {
mid := left + (right-left)/2
if nums[mid] == target {
return mid
}
if nums[left] <= nums[mid] {
if nums[left] <= target && target < nums[mid] {
right = mid - 1
} else {
left = mid + 1
}
} else {
if nums[mid] < target && target <= nums[right] {
left = mid + 1
} else {
right = mid - 1
}
}
}
return -1
}
Problem Statement: Given an integer array nums, return all the unique triplets [nums[i], nums[j], nums[k]] such that i != j != k and nums[i] + nums[j] + nums[k] = 0.
Solution:
func threeSum(nums []int) [][]int {
sort.Ints(nums)
result := [][]int{}
for i := 0; i < len(nums)-2; i++ {
if i == 0 || (i > 0 && nums[i] != nums[i-1]) {
left, right, target := i+1, len(nums)-1, 0-nums[i]
for left < right {
if nums[left]+nums[right] == target {
result = append(result, []int{nums[i], nums[left], nums[right]})
for left < right && nums[left] == nums[left+1] {
left++
}
for left < right && nums[right] == nums[right-1] {
right--
}
left++
right--
} else if nums[left]+nums[right] < target {
left++
} else {
right--
}
}
}
}
return result
}
Problem Statement: Given an array of integers nums and an integer k, return the total number of continuous subarrays whose sum equals to k.
Solution:
func subarraySum(nums []int, k int) int {
sumCount := make(map[int]int)
sumCount[0] = 1
count, sum := 0, 0
for _, num := range nums {
sum += num
count += sumCount[sum-k]
sumCount[sum]++
}
return count
}
These solutions illustrate advanced array-based problems frequently encountered on platforms like LeetCode, showcasing effective problem-solving techniques using Go. Practicing these problems strengthens algorithmic thinking and equips developers with diverse strategies to solve array-related challenges effectively.
I hope this helps, you!!
More such articles:
https://www.youtube.com/@maheshwarligade