315. Count of Smaller Numbers After Self
You are given an integer array nums and you have to return a new counts array. The counts array has the property where counts[i]
is the number of smaller elements to the right of nums[i]
.
Example 1:
Input: nums = [5,2,6,1] Output: [2,1,1,0] Explanation: To the right of 5 there are 2 smaller elements (2 and 1). To the right of 2 there is only 1 smaller element (1). To the right of 6 there is 1 smaller element (1). To the right of 1 there is 0 smaller element.
Constraints:
0 <= nums.length <= 10^5
-10^4 <= nums[i] <= 10^4
Rust Solution
struct Solution;
use std::collections::BTreeMap;
impl Solution {
fn count_smaller(nums: Vec<i32>) -> Vec<i32> {
let mut count: BTreeMap<i32, usize> = BTreeMap::new();
let n = nums.len();
let mut res = vec![0; n];
for i in (0..n).rev() {
let mut sum = 0;
let x = nums[i];
for (_, v) in count.range(..x) {
sum += v;
}
*count.entry(x).or_default() += 1;
res[i] = sum as i32;
}
res
}
}
#[test]
fn test() {
let nums = vec![5, 2, 6, 1];
let res = vec![2, 1, 1, 0];
assert_eq!(Solution::count_smaller(nums), res);
}
Having problems with this solution? Click here to submit an issue on github.