Welcome to Subscribe On Youtube

3616. Number of Student Replacements 🔒

Description

You are given an integer array ranks where ranks[i] represents the rank of the ith student arriving in order. A lower number indicates a better rank.

Initially, the first student is selected by default.

A replacement occurs when a student with a strictly better rank arrives and replaces the current selection.

Return the total number of replacements made.

 

Example 1:

Input: ranks = [4,1,2]

Output: 1

Explanation:

  • The first student with ranks[0] = 4 is initially selected.
  • The second student with ranks[1] = 1 is better than the current selection, so a replacement occurs.
  • The third student has a worse rank, so no replacement occurs.
  • Thus, the number of replacements is 1.

Example 2:

Input: ranks = [2,2,3]

Output: 0

Explanation:

  • The first student with ranks[0] = 2 is initially selected.
  • Neither of ranks[1] = 2 or ranks[2] = 3 is better than the current selection.
  • Thus, the number of replacements is 0.

 

Constraints:

  • 1 <= ranks.length <= 105​​​​​​​
  • 1 <= ranks[i] <= 105

Solutions

Solution 1: Simulation

We use a variable $\text{cur}$ to record the rank of the currently selected student. We iterate through the array $\text{ranks}$, and if we encounter a student with a better rank (i.e., $\text{ranks}[i] < \text{cur}$), we update $\text{cur}$ and increment the answer by one.

After the iteration, we return the answer.

The time complexity is $O(n)$, where $n$ is the number of students. The space complexity is $O(1)$.

  • class Solution { public int totalReplacements(int[] ranks) { int ans = 0; int cur = ranks[0]; for (int x : ranks) { if (x < cur) { cur = x; ++ans; } } return ans; } } 
  • class Solution { public: int totalReplacements(vector<int>& ranks) { int ans = 0; int cur = ranks[0]; for (int x : ranks) { if (x < cur) { cur = x; ++ans; } } return ans; } }; 
  • class Solution: def totalReplacements(self, ranks: List[int]) -> int: ans, cur = 0, ranks[0] for x in ranks: if x < cur: cur = x ans += 1 return ans 
  • func totalReplacements(ranks []int) (ans int) { cur := ranks[0] for _, x := range ranks { if x < cur { cur = x ans++ } } return } 
  • function totalReplacements(ranks: number[]): number { let [ans, cur] = [0, ranks[0]]; for (const x of ranks) { if (x < cur) { cur = x; ans++; } } return ans; } 

All Problems

All Solutions