Bird
Raised Fist0
DSA C++programming~3 mins

Why First and Last Occurrence of Element in DSA C++?

Choose your learning style10 modes available
The Big Idea

Discover how to find where something starts and ends in a list without endless searching!

The Scenario

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.

The Problem

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.

The Solution

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.

Before vs After
✗ Before
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; }
}
✓ After
int first = -1, last = -1;
for (int i = 0; i < n; i++) {
  if (arr[i] == x) {
    if (first == -1) first = i;
    last = i;
  }
}
What It Enables

This lets you quickly find the exact start and end positions of any item in a list, enabling faster searching and better data handling.

Real Life Example

Think about searching for the first and last time a word appears in a book to understand its importance or theme.

Key Takeaways

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

(1/5)
1. What does the "First and Last Occurrence of Element" problem ask you to find in an array?
easy
A. The maximum and minimum elements in the array
B. The sum of all elements in the array
C. The first and last positions where a given element appears
D. The number of unique elements in the array

Solution

  1. Step 1: Understand the problem statement

    The problem asks to find the first and last positions of a specific element in an array.
  2. Step 2: Identify what is required

    We need to locate the earliest and latest index where the element appears.
  3. Final Answer:

    The first and last positions where a given element appears -> Option C
  4. Quick Check:

    First and last occurrence = positions of element [OK]
Hint: Look for earliest and latest index of element [OK]
Common Mistakes:
  • Confusing with sum or max/min of array
  • Returning count instead of positions
  • Ignoring if element is not present
2. Which of the following C++ code snippets correctly finds the first occurrence of element x in vector arr?
easy
A. int first = 0; while(arr[first] != x) { first++; }
B. int first = -1; for(int i=0; i
C. int first = arr.size(); for(int i=0; i
D. int first = -1; for(int i=arr.size()-1; i>=0; i--) { if(arr[i] == x) { first = i; break; } }

Solution

  1. Step 1: Check each option for correctness

    int first = -1; for(int i=0; i
  2. Step 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.
  3. Final Answer:

    int first = -1; for(int i=0; i -> Option B
  4. Quick Check:

    Loop from start, break on first match = first occurrence [OK]
Hint: Loop forward, break on first match for first occurrence [OK]
Common Mistakes:
  • Looping backward for first occurrence
  • Not handling element not found case
  • Using wrong initial index values
3. What will be the output of the following C++ code?
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;
medium
A. 2 3
B. 0 4
C. 1 1
D. 1 3

Solution

  1. 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.
  2. Step 2: Confirm output printed

    Prints first and last indices: 1 3.
  3. Final Answer:

    1 3 -> Option D
  4. Quick Check:

    First=1, Last=3 for element 3 [OK]
Hint: Track first set once, update last on every match [OK]
Common Mistakes:
  • Confusing indices with values
  • Not updating last occurrence correctly
  • Printing values instead of indices
4. Identify the bug in this code snippet that tries to find the last occurrence of x in arr:
int last = -1;
for(int i=0; i<arr.size(); i++) {
  if(arr[i] = x) {
    last = i;
  }
}
medium
A. Using assignment (=) instead of comparison (==) in if condition
B. Loop should run backwards from end to start
C. Variable last should be initialized to 0
D. Missing break statement after finding last occurrence

Solution

  1. Step 1: Check the if condition

    The condition uses single '=' which assigns x to arr[i], not compares.
  2. Step 2: Understand impact of assignment in condition

    Assignment returns value of x, which may cause wrong behavior or infinite loop.
  3. Final Answer:

    Using assignment (=) instead of comparison (==) in if condition -> Option A
  4. Quick Check:

    Use '==' for comparison, not '=' [OK]
Hint: Use '==' for comparison, '=' is assignment [OK]
Common Mistakes:
  • Confusing '=' and '==' in conditions
  • Thinking loop direction causes bug here
  • Assuming break needed for last occurrence
5. Given a sorted vector arr and an element x, which approach is the most efficient to find the first and last occurrence of x?
hard
A. Use binary search twice to find first and last positions
B. Use linear search from start to end
C. Sort the array again and then find occurrences
D. Use a hash map to store all indices of elements

Solution

  1. Step 1: Understand the array is sorted

    Sorted array allows binary search to find elements efficiently.
  2. Step 2: Use binary search twice

    One binary search finds first occurrence, another finds last occurrence in O(log n) time.
  3. Step 3: Compare other options

    Linear search is O(n), sorting again is unnecessary, hash map adds extra space and complexity.
  4. Final Answer:

    Use binary search twice to find first and last positions -> Option A
  5. Quick Check:

    Sorted array + binary search = efficient first/last occurrence [OK]
Hint: Binary search twice on sorted array for first and last occurrence [OK]
Common Mistakes:
  • Using linear search on sorted array
  • Sorting array again unnecessarily
  • Ignoring binary search advantages
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