LeetCode Entry
2410. Maximum Matching of Players With Trainers
Count trainers for players
2410. Maximum Matching of Players With Trainers medium
blog post
substack
youtube

Join me on Telegram
https://t.me/leetcode_daily_unstoppable/1048
Problem TLDR
Count trainers for players #medium #sort
Intuition
Skip not able trainers, always take smallest player and trainer.
Approach
- we can iterate over trainers or over players
- Rust
into_iteris slower thaniter7ms vs 3ms - Rust
iteris slower thanfor3ms vs 0ms - have to sort both, 10^9 range not suitable for counting sort linear solution
- players counter and result counter is the same variable
Complexity
-
Time complexity: \(O(nlog(n))\)
-
Space complexity: \(O(1)\)
Code
// 49ms
fun matchPlayersAndTrainers(ps: IntArray, ts: IntArray): Int {
ps.sort(); ts.sort(); var t = 0; var cnt = 0
return ps.count { p ->
while (t < ts.size && ts[t] < p) ++t
t++ < ts.size
}
}
// 44ms
fun matchPlayersAndTrainers(ps: IntArray, ts: IntArray): Int {
ps.sort(); ts.sort(); var p = 0
for (t in ts) {
if (t < ps[p]) continue
if (++p == ps.size) break
}
return p
}
// 3ms
pub fn match_players_and_trainers(mut ps: Vec<i32>, mut ts: Vec<i32>) -> i32 {
ps.sort_unstable(); ts.sort_unstable(); let mut t = 0;
ps.iter().take_while(|&&p| {
while t < ts.len() && ts[t] < p { t += 1 }
t += 1; t <= ts.len()
}).count() as _
}
// 0ms
pub fn match_players_and_trainers(mut ps: Vec<i32>, mut ts: Vec<i32>) -> i32 {
ps.sort_unstable(); ts.sort_unstable(); let mut p = 0;
for t in ts {
if t < ps[p] { continue }; p += 1;
if p == ps.len() { break }
} p as _
}
// 32ms
int matchPlayersAndTrainers(vector<int>& ps, vector<int>& ts) {
sort(begin(ps), end(ps)); sort(begin(ts), end(ts));
int p = 0;
for (int t = 0; t < size(ts) && p < size(ps); ++t) p += ts[t] >= ps[p];
return p;
}