D. func countOccurrences(arr []int, target int) { return 0 }
Solution
Step 1: Check function signature syntax
In Go, slices are declared as []int, and return type int is correct for count.
Step 2: Validate return statement matches return type
Returning 0 as int matches the return type int.
Final Answer:
func countOccurrences(arr []int, target int) int { return 0 } -> Option A
Quick Check:
Correct Go function syntax [OK]
Hint: Use []int for slices and match return type [OK]
Common Mistakes:
Using array syntax int[] instead of []int
Mismatching return type and return value
Omitting return type in function signature
3. What will be the output of the following Go code snippet?
func countOccurrences(arr []int, target int) int {
left := 0
right := len(arr) - 1
first := -1
for left <= right {
mid := (left + right) / 2
if arr[mid] == target {
first = mid
right = mid - 1
} else if arr[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
if first == -1 {
return 0
}
left = 0
right = len(arr) - 1
last := -1
for left <= right {
mid := (left + right) / 2
if arr[mid] == target {
last = mid
left = mid + 1
} else if arr[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return last - first + 1
}
func main() {
arr := []int{1, 2, 2, 2, 3, 4, 5}
count := countOccurrences(arr, 2)
fmt.Println(count)
}
medium
A. 2
B. 3
C. 1
D. 0
Solution
Step 1: Find first occurrence of 2
Binary search finds first index of 2 at position 1.
Step 2: Find last occurrence of 2
Binary search finds last index of 2 at position 3.
Step 3: Calculate count
Count = last - first + 1 = 3 - 1 + 1 = 3.
Final Answer:
3 -> Option B
Quick Check:
Occurrences of 2 = 3 [OK]
Hint: Find first and last index, then subtract [OK]
Common Mistakes:
Returning index instead of count
Not updating left/right correctly in binary search
Confusing first and last occurrence indices
4. Identify the bug in the following Go function that counts occurrences of a target in a sorted array:
func countOccurrences(arr []int, target int) int {
left, right := 0, len(arr)-1
count := 0
for left <= right {
mid := (left + right) / 2
if arr[mid] == target {
count++
break
} else if arr[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return count
}
medium
A. It counts only one occurrence, not all.
B. It causes an infinite loop.
C. It returns the index instead of count.
D. It does not handle empty arrays.
Solution
Step 1: Analyze loop behavior
The loop breaks after finding one occurrence, so count increments only once.
Step 2: Understand counting logic
Counting all occurrences requires searching for first and last positions, not just one match.
Final Answer:
It counts only one occurrence, not all. -> Option A
Quick Check:
Loop breaks early, count = 1 [OK]
Hint: Break stops counting after first match [OK]
Common Mistakes:
Using break instead of continuing search
Not searching for first and last indices
Assuming one match equals total count
5. Given a sorted array with possible duplicates, how would you modify the binary search approach to count occurrences of multiple target values efficiently?
Choose the best approach.
hard
A. Perform separate binary searches for first and last occurrences of each target, then sum counts.
B. Use a linear scan for each target to count occurrences.
C. Sort the array again before counting each target.
D. Use a hash map to store counts after one full scan.
Solution
Step 1: Consider efficiency for multiple targets
Binary search per target is O(k log n) for k targets, which can be costly.
Step 2: Use hash map after one scan
A single linear scan builds a map of counts for all elements in O(n), allowing O(1) lookup per target.
Step 3: Compare approaches
Hash map approach is more efficient for multiple queries than repeated binary searches.
Final Answer:
Use a hash map to store counts after one full scan. -> Option D
Quick Check:
Hash map = efficient multiple counts [OK]
Hint: Build counts once, then query fast [OK]
Common Mistakes:
Repeating binary search for each target
Sorting array multiple times unnecessarily
Ignoring hash map for frequency counting
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.