Pattern #2
Arrays
Important interview questions, thinking patterns, and rules for solving array problems in Go.
Must Solve
17 core questions — solve these first.
- 1.Two SumHash Mapeasy
- 2.Contains DuplicateHash Seteasy
- 3.Best Time to Buy and Sell StockTrack mineasy
- 4.Maximum SubarrayKadane'smedium
- 5.Move ZeroesTwo Pointerseasy
- 6.Remove Duplicates from Sorted ArrayTwo Pointerseasy
- 7.Merge Sorted ArrayTwo Pointers (end)easy
- 8.Majority ElementBoyer-Mooreeasy
- 9.Missing NumberXOR / Matheasy
- 10.Rotate ArrayReverse trickmedium
- 11.Product of Array Except SelfPrefix/Suffixmedium
- 12.3SumSort + Two Pointersmedium
- 13.Container With Most WaterTwo Pointersmedium
- 14.Longest Consecutive SequenceHash Setmedium
- 15.Subarray Sum Equals KPrefix Sum + Mapmedium
- 16.Maximum Product SubarrayTrack min & maxmedium
- 17.Trapping Rain WaterTwo Pointers / Stackhard
Also Important
9 more questions worth practicing.
- 18.Find All Numbers Disappeared in an ArrayIndex markingeasy
- 19.Find the Duplicate NumberFloyd's Cyclemedium
- 20.Sort ColorsDutch Flagmedium
- 21.Next PermutationFind swap pointmedium
- 22.Set Matrix ZeroesUse first row/colmedium
- 23.Spiral MatrixBoundariesmedium
- 24.Merge IntervalsSort + mergemedium
- 25.Insert IntervalBinary Search / Scanmedium
- 26.First Missing PositiveIndex as hashhard
How to Think
- Need pair?Hash Map / Two Pointers
- Array is sorted?Two Pointers / Binary Search
- Need duplicate/frequency?Hash Map / Hash Set
- Need maximum subarray sum?Kadane's Algorithm
- Need continuous subarray?Sliding Window / Prefix Sum
- Need sum = K?Prefix Sum + Hash Map
- Need modify without extra memory?In-place / Two Pointers
- Need triplet?Sort + Two Pointers
- Need max/min while scanning?Keep running max/min
- Need nearest left/right bigger/smaller?Stack
Go Quick Reference
Two Sum (Hash Map)
func twoSum(nums []int, target int) []int {
m := make(map[int]int)
for i, v := range nums {
if j, ok := m[target-v]; ok {
return []int{j, i}
}
m[v] = i
}
return nil
}👉 Time: O(n) | Space: O(n)
Kadane's — Maximum Subarray
func maxSubArray(nums []int) int {
maxSum, curSum := nums[0], nums[0]
for _, v := range nums[1:] {
if curSum < 0 {
curSum = 0
}
curSum += v
if curSum > maxSum {
maxSum = curSum
}
}
return maxSum
}👉 Time: O(n) | Space: O(1)
3Sum (Sort + Two Pointers)
func threeSum(nums []int) [][]int {
sort.Ints(nums)
var res [][]int
for i := 0; i < len(nums)-2; i++ {
if i > 0 && nums[i] == nums[i-1] { continue }
lo, hi := i+1, len(nums)-1
for lo < hi {
sum := nums[i] + nums[lo] + nums[hi]
if sum == 0 {
res = append(res, []int{nums[i], nums[lo], nums[hi]})
for lo < hi && nums[lo] == nums[lo+1] { lo++ }
for lo < hi && nums[hi] == nums[hi-1] { hi-- }
lo++; hi--
} else if sum < 0 { lo++ } else { hi-- }
}
}
return res
}👉 Time: O(n²) | Space: O(1)
Interview Rules
- 1. First understand: subarray or subsequence?
- 2. Check if array is sorted.
- 3. Check if duplicates exist.
- 4. Ask if extra memory is allowed.
- 5. Try to improve
O(n²)toO(n)orO(n log n).
Always Test These Edge Cases
Empty array → []
One element → [5]
Duplicates → [1, 1, 1]
Negative numbers → [-3, -1, 0]
Already sorted → [1, 2, 3, 4]
💡 Arrays are the most common interview topic. Master these 26 problems and you cover 80% of array questions.