0
0
DSA C++programming~20 mins

First and Last Occurrence of Element in DSA C++ - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
First and Last Occurrence Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Find first and last occurrence of 3 in sorted array
What is the output of the following C++ code that finds the first and last occurrence of the number 3 in a sorted array?
DSA C++
#include <iostream>
#include <vector>
using namespace std;

int firstOccurrence(const vector<int>& arr, int target) {
    int low = 0, high = arr.size() - 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;
}

int lastOccurrence(const vector<int>& arr, int target) {
    int low = 0, high = arr.size() - 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;
}

int main() {
    vector<int> arr = {1, 2, 3, 3, 3, 4, 5};
    int target = 3;
    cout << firstOccurrence(arr, target) << " " << lastOccurrence(arr, target) << endl;
    return 0;
}
A1 3
B2 4
C3 5
D-1 -1
Attempts:
2 left
💡 Hint
Remember that the array is sorted and contains multiple 3s. The first occurrence is the smallest index where 3 appears, and the last occurrence is the largest index.
Predict Output
intermediate
2:00remaining
Output when element is not present
What will be the output of the following code when searching for element 6 in the array?
DSA C++
#include <iostream>
#include <vector>
using namespace std;

int firstOccurrence(const vector<int>& arr, int target) {
    int low = 0, high = arr.size() - 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;
}

int lastOccurrence(const vector<int>& arr, int target) {
    int low = 0, high = arr.size() - 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;
}

int main() {
    vector<int> arr = {1, 2, 3, 3, 3, 4, 5};
    int target = 6;
    cout << firstOccurrence(arr, target) << " " << lastOccurrence(arr, target) << endl;
    return 0;
}
A-1 -1
B0 6
C6 6
D5 5
Attempts:
2 left
💡 Hint
If the element is not found, the functions return -1.
🔧 Debug
advanced
2:00remaining
Identify the bug in lastOccurrence function
The following code is intended to find the last occurrence of a target in a sorted array. What is the bug causing incorrect output?
DSA C++
int lastOccurrence(const vector<int>& arr, int target) {
    int low = 0, high = arr.size() - 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;
}
AThe result variable is not updated when arr[mid] > target.
BThe mid calculation should be 'mid = (low + high + 1) / 2'.
CThe function should return 'low' instead of 'result'.
DThe loop condition should be 'low <= high' instead of 'low < high'.
Attempts:
2 left
💡 Hint
Check the loop condition carefully to ensure all elements are checked.
Predict Output
advanced
2:00remaining
Output of first and last occurrence in array with single element
What is the output of the code when the array contains only one element which is the target?
DSA C++
#include <iostream>
#include <vector>
using namespace std;

int firstOccurrence(const vector<int>& arr, int target) {
    int low = 0, high = arr.size() - 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;
}

int lastOccurrence(const vector<int>& arr, int target) {
    int low = 0, high = arr.size() - 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;
}

int main() {
    vector<int> arr = {7};
    int target = 7;
    cout << firstOccurrence(arr, target) << " " << lastOccurrence(arr, target) << endl;
    return 0;
}
A0 0
B-1 -1
C0 -1
D-1 0
Attempts:
2 left
💡 Hint
With only one element equal to target, both first and last occurrence are at index 0.
🧠 Conceptual
expert
2:00remaining
Why binary search is efficient for first and last occurrence?
Why is binary search preferred over linear search to find the first and last occurrence of an element in a sorted array?
ABinary search works only on unsorted arrays, so it is faster than linear search.
BBinary search can find the exact position without checking all elements, but linear search cannot find the element.
CBinary search reduces the search space by half each step, making it O(log n), while linear search is O(n).
DBinary search uses recursion which is always faster than iteration used in linear search.
Attempts:
2 left
💡 Hint
Think about how many elements are checked in each method.