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
orranks[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; }