Discover how to find where something starts and ends in a list without endless searching!
Why First and Last Occurrence of Element in DSA C++?
Imagine you have a long list of names written on paper, and you want to find where a particular name first appears and where it appears last.
You start scanning from the top to find the first time the name shows up, then you scan again from the bottom to find the last time it appears.
This manual scanning is slow and tiring, especially if the list is very long.
You might miss some occurrences or get confused about the exact positions.
Doing this repeatedly wastes time and can cause mistakes.
Using the concept of finding the first and last occurrence of an element in a list with code helps you quickly and accurately find these positions.
The code can jump directly to the right spots without scanning the entire list multiple times.
int first = -1; for (int i = 0; i < n; i++) { if (arr[i] == x) { first = i; break; } } int last = -1; for (int i = n - 1; i >= 0; i--) { if (arr[i] == x) { last = i; break; } }
int first = -1, last = -1; for (int i = 0; i < n; i++) { if (arr[i] == x) { if (first == -1) first = i; last = i; } }
This lets you quickly find the exact start and end positions of any item in a list, enabling faster searching and better data handling.
Think about searching for the first and last time a word appears in a book to understand its importance or theme.
Manually searching for first and last occurrences is slow and error-prone.
Code can find these positions efficiently in one pass.
This helps in quick data analysis and searching tasks.
Practice
Solution
Step 1: Understand the problem statement
The problem asks to find the first and last positions of a specific element in an array.Step 2: Identify what is required
We need to locate the earliest and latest index where the element appears.Final Answer:
The first and last positions where a given element appears -> Option CQuick Check:
First and last occurrence = positions of element [OK]
- Confusing with sum or max/min of array
- Returning count instead of positions
- Ignoring if element is not present
x in vector arr?Solution
Step 1: Check each option for correctness
int first = -1; for(int i=0; iStep 2: Identify errors in other options
int first = 0; while(arr[first] != x) { first++; } may cause out-of-bound error if x not found; int first = arr.size(); for(int i=0; i=0; i--) { if(arr[i] == x) { first = i; break; } } finds last occurrence due to reverse loop.Final Answer:
int first = -1; for(int i=0; i -> Option BQuick Check:
Loop from start, break on first match = first occurrence [OK]
- Looping backward for first occurrence
- Not handling element not found case
- Using wrong initial index values
std::vector<int> arr = {2, 3, 5, 3, 7};
int x = 3;
int first = -1, last = -1;
for(int i=0; i<arr.size(); i++) {
if(arr[i] == x) {
if(first == -1) first = i;
last = i;
}
}
std::cout << first << " " << last << std::endl;Solution
Step 1: Trace the loop to find first and last occurrence of 3
Indices: 0->2, 1->3, 2->5, 3->3, 4->7. First 3 at index 1, last 3 at index 3.Step 2: Confirm output printed
Prints first and last indices: 1 3.Final Answer:
1 3 -> Option DQuick Check:
First=1, Last=3 for element 3 [OK]
- Confusing indices with values
- Not updating last occurrence correctly
- Printing values instead of indices
x in arr:int last = -1;
for(int i=0; i<arr.size(); i++) {
if(arr[i] = x) {
last = i;
}
}Solution
Step 1: Check the if condition
The condition uses single '=' which assigns x to arr[i], not compares.Step 2: Understand impact of assignment in condition
Assignment returns value of x, which may cause wrong behavior or infinite loop.Final Answer:
Using assignment (=) instead of comparison (==) in if condition -> Option AQuick Check:
Use '==' for comparison, not '=' [OK]
- Confusing '=' and '==' in conditions
- Thinking loop direction causes bug here
- Assuming break needed for last occurrence
arr and an element x, which approach is the most efficient to find the first and last occurrence of x?Solution
Step 1: Understand the array is sorted
Sorted array allows binary search to find elements efficiently.Step 2: Use binary search twice
One binary search finds first occurrence, another finds last occurrence in O(log n) time.Step 3: Compare other options
Linear search is O(n), sorting again is unnecessary, hash map adds extra space and complexity.Final Answer:
Use binary search twice to find first and last positions -> Option AQuick Check:
Sorted array + binary search = efficient first/last occurrence [OK]
- Using linear search on sorted array
- Sorting array again unnecessarily
- Ignoring binary search advantages
Ready to prove it?
Pass the test and this pattern moves unknown
