Bird
Raised Fist0
DSA C#programming~20 mins

Count Occurrences of Element in Sorted Array in DSA C# - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Count Occurrences Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of counting occurrences using binary search
What is the output of the following C# code that counts occurrences of 3 in a sorted array?
DSA C#
using System;

class Program {
    static int CountOccurrences(int[] arr, int x) {
        int first = Array.BinarySearch(arr, x);
        if (first < 0) return 0;
        int count = 0;
        int index = first;
        while (index < arr.Length && arr[index] == x) {
            count++;
            index++;
        }
        return count;
    }

    static void Main() {
        int[] arr = {1, 2, 3, 3, 3, 4, 5};
        Console.WriteLine(CountOccurrences(arr, 3));
    }
}
A3
B0
C1
DThrows an exception
Attempts:
2 left
💡 Hint
Think about how many times 3 appears consecutively starting from the first found index.
🧠 Conceptual
intermediate
1:30remaining
Why use binary search to count occurrences?
Why is binary search a good choice to count occurrences of an element in a sorted array?
ABecause it finds the element quickly and then counts neighbors efficiently
BBecause it sorts the array first
CBecause it uses recursion to count all elements
DBecause it modifies the array to group elements
Attempts:
2 left
💡 Hint
Think about the speed of finding an element in a sorted list.
❓ Predict Output
advanced
2:00remaining
Output of counting occurrences with custom binary search bounds
What is the output of this C# code that counts occurrences of 2 in a sorted array using custom binary search for first and last positions?
DSA C#
using System;

class Program {
    static int FindFirst(int[] arr, int x) {
        int low = 0, high = arr.Length - 1, result = -1;
        while (low <= high) {
            int mid = (low + high) / 2;
            if (arr[mid] == x) {
                result = mid;
                high = mid - 1;
            } else if (arr[mid] < x) {
                low = mid + 1;
            } else {
                high = mid - 1;
            }
        }
        return result;
    }

    static int FindLast(int[] arr, int x) {
        int low = 0, high = arr.Length - 1, result = -1;
        while (low <= high) {
            int mid = (low + high) / 2;
            if (arr[mid] == x) {
                result = mid;
                low = mid + 1;
            } else if (arr[mid] < x) {
                low = mid + 1;
            } else {
                high = mid - 1;
            }
        }
        return result;
    }

    static int CountOccurrences(int[] arr, int x) {
        int first = FindFirst(arr, x);
        if (first == -1) return 0;
        int last = FindLast(arr, x);
        return last - first + 1;
    }

    static void Main() {
        int[] arr = {1, 2, 2, 2, 3, 4, 5};
        Console.WriteLine(CountOccurrences(arr, 2));
    }
}
A1
B2
C3
D0
Attempts:
2 left
💡 Hint
Check how first and last indices of 2 are found and subtracted.
🔧 Debug
advanced
2:00remaining
Identify the error in counting occurrences code
What error does the following C# code produce when counting occurrences of 4 in a sorted array?
DSA C#
using System;

class Program {
    static int CountOccurrences(int[] arr, int x) {
        int first = Array.BinarySearch(arr, x);
        if (first < 0) return 0;
        int count = 0;
        int index = first;
        while (index < arr.Length && arr[index] == x) {
            count++;
            index++;
        }
        return count;
    }

    static void Main() {
        int[] arr = {1, 2, 3, 4, 4, 4, 5};
        Console.WriteLine(CountOccurrences(arr, 4));
    }
}
A0
BIndexOutOfRangeException
C3
DSyntaxError
Attempts:
2 left
💡 Hint
Check the loop condition carefully for array bounds.
🚀 Application
expert
2:30remaining
Count occurrences in a large sorted array efficiently
You have a very large sorted array with millions of elements. Which approach is best to count occurrences of a number efficiently?
AUse a hash map to store counts of all elements
BIterate through the entire array counting matches
CSort the array first, then count occurrences linearly
DUse two binary searches to find first and last occurrence, then subtract indices
Attempts:
2 left
💡 Hint
Consider time complexity for large sorted data.

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 works only for unsorted arrays.
B. It uses less memory than a linear scan.
C. It reduces the time complexity to O(log n) compared to a linear scan.
D. It counts occurrences without checking the array elements.

Solution

  1. Step 1: Understand binary search efficiency

    Binary search divides the search space in half each time, making it faster than checking every element.
  2. Step 2: Compare with linear scan

    Linear scan checks each element, taking O(n) time, while binary search takes O(log n) time.
  3. Final Answer:

    It reduces the time complexity to O(log n) compared to a linear scan. -> Option C
  4. Quick Check:

    Binary search = O(log n) speed [OK]
Hint: Binary search halves search space, speeding up counting [OK]
Common Mistakes:
  • Thinking binary search works on unsorted arrays
  • Confusing time complexity with memory usage
  • Assuming binary search counts without element checks
2. Which of the following C# method signatures correctly represents a function to count occurrences of an integer in a sorted array?
easy
A. bool CountOccurrences(int[] arr, int target)
B. int CountOccurrences(int[] arr, int target)
C. int CountOccurrences(int target, int[] arr)
D. void CountOccurrences(int[] arr, int target)

Solution

  1. Step 1: Identify return type for count

    The function should return an integer representing the count, so return type must be int.
  2. Step 2: Check parameter order and types

    Common convention is array first, then target element; parameters types must match int array and int target.
  3. Final Answer:

    int CountOccurrences(int[] arr, int target) -> Option B
  4. Quick Check:

    Return count as int, array then target [OK]
Hint: Count returns int; array parameter comes before target [OK]
Common Mistakes:
  • Using void return type instead of int
  • Swapping parameter order incorrectly
  • Returning bool instead of count
3. What will be the output of the following C# code snippet?
int[] arr = {1, 2, 2, 2, 3, 4, 5};
int target = 2;
int count = CountOccurrences(arr, target);
Console.WriteLine(count);

int CountOccurrences(int[] nums, int x) {
    int first = Array.BinarySearch(nums, x);
    if (first < 0) return 0;
    int count = 1;
    int left = first - 1;
    while (left >= 0 && nums[left] == x) {
        count++;
        left--;
    }
    int right = first + 1;
    while (right < nums.Length && nums[right] == x) {
        count++;
        right++;
    }
    return count;
}
medium
A. 3
B. 2
C. 1
D. 0

Solution

  1. Step 1: Find first occurrence index using BinarySearch

    BinarySearch finds one occurrence of 2 at index 2.
  2. Step 2: Count occurrences left and right of index 2

    Left side: index 1 and 0 checked; index 1 is 2 (count=2), index 0 is 1 (stop). Right side: index 3 is 2 (count=3), index 4 is 3 (stop).
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    Occurrences of 2 = 3 [OK]
Hint: BinarySearch finds one index; count neighbors equal to target [OK]
Common Mistakes:
  • Assuming BinarySearch returns first occurrence always
  • Counting only one side neighbors
  • Returning 0 if not found without checking neighbors
4. Identify the bug in the following C# method that counts occurrences of a target in a sorted array:
int CountOccurrences(int[] nums, int target) {
    int first = Array.BinarySearch(nums, target);
    if (first < 0) return 0;
    int count = 1;
    int left = first - 1;
    while (left > 0 && nums[left] == target) {
        count++;
        left--;
    }
    int right = first + 1;
    while (right < nums.Length && nums[right] == target) {
        count++;
        right++;
    }
    return count;
}
medium
A. The method should return -1 if target not found instead of 0.
B. The right boundary check should be 'right <= nums.Length' instead of 'right < nums.Length'.
C. The count variable should start at 0, not 1.
D. The left boundary check should be 'left >= 0' instead of 'left > 0'.

Solution

  1. Step 1: Analyze left boundary condition in while loop

    The loop checks 'left > 0', so it skips index 0, missing a possible occurrence at start.
  2. Step 2: Correct boundary condition to include index 0

    Changing condition to 'left >= 0' ensures index 0 is checked for target equality.
  3. Final Answer:

    The left boundary check should be 'left >= 0' instead of 'left > 0'. -> Option D
  4. Quick Check:

    Check array start index 0 with '>= 0' [OK]
Hint: Use '>= 0' to include first array index in left scan [OK]
Common Mistakes:
  • Using 'left > 0' misses first element
  • Returning -1 instead of 0 when not found
  • Starting count at 0 instead of 1
  • Using wrong right boundary condition
5. Given a sorted array with possible duplicates, how can you efficiently count occurrences of a target element using two binary searches in C#?
hard
A. Find the first and last occurrence indices of the target using binary search, then calculate count as last - first + 1.
B. Use a single binary search to find any occurrence, then count neighbors linearly.
C. Sort the array again and count occurrences with a linear scan.
D. Use a hash map to store counts of all elements, then retrieve target count.

Solution

  1. Step 1: Use binary search to find first occurrence of target

    Modify binary search to find the lowest index where target appears.
  2. Step 2: Use binary search to find last occurrence of target

    Modify binary search to find the highest index where target appears.
  3. Step 3: Calculate count from indices

    Count = last occurrence index - first occurrence index + 1.
  4. Final Answer:

    Find the first and last occurrence indices of the target using binary search, then calculate count as last - first + 1. -> Option A
  5. Quick Check:

    Count = last - first + 1 using two binary searches [OK]
Hint: Two binary searches find boundaries; subtract indices for count [OK]
Common Mistakes:
  • Using linear scan after one binary search
  • Sorting array again unnecessarily
  • Using hash map instead of binary search
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard