📖 Scenario: You have a sorted list of numbers representing daily temperatures recorded in a city. You want to find out how many times a specific temperature was recorded.
🎯 Goal: Build a Go program that counts how many times a given number appears in a sorted array.
📋 What You'll Learn
Create a sorted array of integers called temperatures with exact values
Create a variable called target to hold the temperature to count
Write a loop to count how many times target appears in temperatures
Print the count of occurrences
💡 Why This Matters
🌍 Real World
Counting occurrences of values in sorted data is common in statistics, data analysis, and reporting.
💼 Career
This skill helps in roles like data analyst, software developer, and quality assurance where data processing is needed.
Progress0 / 4 steps
1
Create the sorted array of temperatures
Create a sorted array of integers called temperatures with these exact values: 12, 15, 15, 15, 18, 20, 20, 22
DSA Go
Hint
Use a slice literal to create temperatures with the exact numbers in order.
2
Set the target temperature to count
Create an integer variable called target and set it to 15
DSA Go
Hint
Use target := 15 to create the variable.
3
Count how many times the target appears
Write a for loop using the variable temp to iterate over temperatures and count how many times target appears. Store the count in a variable called count
DSA Go
Hint
Start count at 0. Use for _, temp := range temperatures to loop. Increase count when temp == target.
4
Print the count of occurrences
Write a print statement to display the value of count
DSA Go
Hint
Use fmt.Println(count) to print the number of times target appears.
Practice
(1/5)
1. What is the main advantage of using a binary search approach to count occurrences of an element in a sorted array?
easy
A. It counts all elements without searching.
B. It sorts the array automatically.
C. It reduces the search time to logarithmic complexity.
D. It works only on unsorted arrays.
Solution
Step 1: Understand binary search efficiency
Binary search divides the search space in half each time, making it faster than linear search.
Step 2: Apply to counting occurrences
By finding the first and last positions of the element, we can count occurrences efficiently.
Final Answer:
It reduces the search time to logarithmic complexity. -> Option C
Quick Check:
Binary search = O(log n) time [OK]
Hint: Binary search halves search space each step [OK]
Common Mistakes:
Thinking binary search sorts the array
Using linear search for counting in sorted array
Assuming binary search works on unsorted arrays
2. Which Go code snippet correctly declares a function to count occurrences of an integer in a sorted slice?
easy
A. func countOccurrences(arr []int, target int) int { return 0 }
B. func countOccurrences(arr int[], target int) int { return 0 }
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.