Hint: Use greedy if local best leads to global best [OK]
Common Mistakes:
Confusing overlapping subproblems with greedy applicability
Using greedy when problem needs full exploration
Ignoring optimal substructure requirement
2. Which Go code snippet correctly declares a memoization map for dynamic programming?
easy
A. memo := new(map[int]int)
B. memo := make(map[int]int)
C. memo := map[]int{}
D. memo := []int{}
Solution
Step 1: Understand Go map declaration
In Go, maps are declared with make(map[keyType]valueType) to initialize properly.
Step 2: Check each option
memo := make(map[int]int) uses make with correct syntax. memo := []int{} is a slice, not a map. memo := map[]int{} has invalid syntax. memo := new(map[int]int) uses new which returns pointer, not initialized map.
Final Answer:
memo := make(map[int]int) -> Option B
Quick Check:
Use make(map[key]value) for maps [OK]
Hint: Use make(map[key]value) to create maps in Go [OK]
Common Mistakes:
Using new(map[int]int) which returns nil map pointer
Confusing slices with maps
Incorrect map syntax like map[]int{}
3. What is the output of the following Go code snippet?
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
weights := []int{1, 3, 4, 5}
values := []int{1, 4, 5, 7}
capacity := 7
dp := make([]int, capacity+1)
for i := 0; i < len(weights); i++ {
for w := capacity; w >= weights[i]; w-- {
dp[w] = max(dp[w], dp[w-weights[i]] + values[i])
}
}
fmt.Println(dp[capacity])
}
medium
A. 12
B. 10
C. 11
D. 9
Solution
Step 1: Understand the code - 0/1 Knapsack DP
The code uses bottom-up DP to find max value for capacity 7 with given weights and values.
Step 2: Trace DP array updates
Items: (1,1), (3,4), (4,5), (5,7). DP updates from capacity down to weight. Final dp[7] = max value achievable is 11.
Final Answer:
11 -> Option C
Quick Check:
DP knapsack max value = 11 [OK]
Hint: Trace DP from largest capacity down to weight [OK]
Common Mistakes:
Iterating w from low to high causing wrong results
Confusing weights and values arrays
Forgetting to update dp[w] with max
4. Identify the bug in this greedy approach for coin change problem in Go:
The greedy approach works only if coins are sorted descending to pick largest coin first.
Step 2: Check coins order
Coins are {1,3,4} ascending, so greedy picks 1 first, leading to wrong minimal count.
Final Answer:
Coins slice is not sorted descending -> Option A
Quick Check:
Sort coins descending for greedy coin change [OK]
Hint: Sort coins descending before greedy coin change [OK]
Common Mistakes:
Not sorting coins descending
Assuming greedy always works for coin change
Ignoring leftover amount check
5. You want to find the minimum number of coins to make amount 11 using coins {1, 5, 6}. Which approach is best and why?
hard
A. Dynamic Programming, because greedy fails due to no greedy choice property
B. Greedy, because coins are sorted ascending
C. Greedy, because picking largest coin first always works
D. Neither, because problem is unsolvable
Solution
Step 1: Check greedy choice property for coin set
For coins {1,5,6}, greedy picks 6 then 5, total 2 coins for 11, which is minimal. However, greedy does not always work for all amounts with these coins.
Step 2: Consider counterexamples and DP suitability
In some cases greedy fails (e.g., amount 7 with coins {1,5,6} greedy picks 6+1=2 coins but better is 1+1+5=3 coins, so greedy works here but not always. DP always finds minimal coins by exploring all subproblems.
Final Answer:
Dynamic Programming, because greedy fails due to no greedy choice property -> Option A
Quick Check:
Use DP if greedy choice property missing [OK]
Hint: Use DP if greedy choice property is missing [OK]
Common Mistakes:
Assuming greedy always works for coin change
Ignoring overlapping subproblems in coin change
Choosing greedy because coins are sorted ascending
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.