📖 Scenario: You have a sorted list of numbers representing daily temperatures recorded over a month. You want to find out how many days had a specific temperature.
🎯 Goal: Build a Java program that counts how many times a given temperature appears in the sorted array of temperatures.
📋 What You'll Learn
Create an integer array called temperatures with the exact values: 15, 15, 16, 16, 16, 17, 18, 18, 19, 20
Create an integer variable called targetTemp and set it to 16
Write a for loop using the variable temp to iterate over temperatures and count how many times targetTemp appears
Print the count in the format: System.out.println("Count of " + targetTemp + ": " + count);
💡 Why This Matters
🌍 Real World
Counting occurrences of specific values in sorted data is common in analyzing sensor readings, sales data, or user activity logs.
💼 Career
This skill helps in data analysis roles, software testing, and any programming job that requires processing and summarizing sorted datasets efficiently.
Progress0 / 4 steps
1
Create the sorted array of temperatures
Create an integer array called temperatures with these exact values: 15, 15, 16, 16, 16, 17, 18, 18, 19, 20
DSA Java
Hint
Use int[] temperatures = { ... }; to create the array with the exact numbers.
2
Set the target temperature to count
Create an integer variable called targetTemp and set it to 16
DSA Java
Hint
Use int targetTemp = 16; to create the variable.
3
Count how many times the target temperature appears
Write a for loop using the variable temp to iterate over temperatures and count how many times targetTemp appears. Use an integer variable called count initialized to 0 before the loop.
DSA Java
Hint
Use a for-each loop: for (int temp : temperatures) and inside it, check if temp == targetTemp to increase count.
4
Print the count of the target temperature
Print the count using System.out.println("Count of " + targetTemp + ": " + count);
DSA Java
Hint
Use System.out.println("Count of " + targetTemp + ": " + count); to print the result.
Practice
(1/5)
1. What is the main advantage of using binary search to count occurrences of an element in a sorted array?
easy
A. It uses less memory than linear search
B. It reduces the search time to logarithmic complexity
C. It sorts the array automatically
D. It works only for unsorted arrays
Solution
Step 1: Understand binary search efficiency
Binary search divides the search space in half each time, making it faster than checking every element.
Step 2: Compare with linear search
Linear search checks each element one by one, which takes longer for large arrays.
Final Answer:
It reduces the search time to logarithmic complexity -> Option B
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
Confusing memory use with speed
Assuming binary search works on unsorted arrays
2. Which Java method signature correctly represents a function to count occurrences of an integer target in a sorted array arr?
easy
A. public static int countOccurrences(int[] arr, int target)
B. public int countOccurrences(int target, int[] arr)
C. static void countOccurrences(int[] arr, int target)
D. int countOccurrences(int[] arr, int target)
Solution
Step 1: Check method return type and parameters
The method should return an integer count and accept an integer array and target integer as parameters.
Step 2: Verify static and access modifiers
Static is common for utility methods; public allows access. The order of parameters matters for clarity.
Final Answer:
public static int countOccurrences(int[] arr, int target) -> Option A
Quick Check:
Correct signature returns int and takes (int[], int) [OK]
Hint: Return count as int, parameters: array then target [OK]
Common Mistakes:
Wrong parameter order
Void return type instead of int
Missing static keyword when needed
3. What is the output of the following Java code snippet?
int[] arr = {1, 2, 2, 2, 3, 4, 5};
int target = 2;
int count = countOccurrences(arr, target);
System.out.println(count);
public static int countOccurrences(int[] arr, int target) {
int first = firstOccurrence(arr, target);
if (first == -1) return 0;
int last = lastOccurrence(arr, target);
return last - first + 1;
}
public static int firstOccurrence(int[] arr, int target) {
int low = 0, high = arr.length - 1, result = -1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
result = mid;
high = mid - 1;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return result;
}
public static int lastOccurrence(int[] arr, int target) {
int low = 0, high = arr.length - 1, result = -1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
result = mid;
low = mid + 1;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return result;
}
medium
A. 2
B. 4
C. 3
D. 0
Solution
Step 1: Find first occurrence of 2 in array
First occurrence is at index 1 (arr[1] = 2).
Step 2: Find last occurrence of 2 in array
Last occurrence is at index 3 (arr[3] = 2).
Step 3: Calculate count
Count = last - first + 1 = 3 - 1 + 1 = 3.
Final Answer:
3 -> Option C
Quick Check:
Occurrences of 2 = 3 [OK]
Hint: Count = last index - first index + 1 [OK]
Common Mistakes:
Confusing first and last indices
Off-by-one errors in count calculation
Returning 0 when element exists
4. Identify the bug in the following method that counts occurrences of target in a sorted array arr:
public static int countOccurrences(int[] arr, int target) {
int low = 0, high = arr.length - 1;
int count = 0;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
count++;
low = mid + 1;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return count;
}
medium
A. It counts only occurrences after the first found index
B. It counts only one occurrence instead of all
C. It counts duplicates multiple times incorrectly
D. It never terminates due to infinite loop
Solution
Step 1: Analyze counting logic in binary search
The code increments count only when arr[mid] == target and moves low to mid + 1, skipping elements before mid.
Step 2: Understand missed occurrences
This approach counts occurrences only from the first found index forward, missing any before mid.
Final Answer:
It counts only occurrences after the first found index -> Option A
Expecting binary search to count all duplicates directly
5. Given a sorted array arr that may contain multiple occurrences of target, how can you efficiently count the occurrences if the array is very large and you want to minimize the number of comparisons?
hard
A. Use a hash map to store counts of all elements
B. Use a linear scan from start to end counting matches
C. Sort the array first, then count occurrences
D. Use two binary searches to find first and last occurrence, then subtract indices
Solution
Step 1: Understand the problem constraints
Array is sorted and large, so linear scan is costly and sorting again is unnecessary.
Step 2: Apply binary search twice
Use binary search to find the first occurrence index and last occurrence index of target efficiently.
Step 3: Calculate count
Count = last occurrence index - first occurrence index + 1, minimizing comparisons.
Final Answer:
Use two binary searches to find first and last occurrence, then subtract indices -> Option D
Quick Check:
Two binary searches = efficient counting [OK]
Hint: Find first and last index with binary search [OK]
Common Mistakes:
Using linear scan on large arrays
Sorting already sorted array again
Using extra memory unnecessarily
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.