题目地址:
https://leetcode.com/problems/how-many-numbers-are-smaller-than-the-current-number/
给定一个长 n n n数组,要求将每个数替换为全数组里小于自己的数字个数。题目保证每个数的范围是 [ 0 , 100 ] [0,100] [0,100]。
可以用基数排序的思想。代码如下:
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
int pre[101];
memset(pre, 0, sizeof pre);
for (auto x : nums) pre[x]++;
for (int i = 1; i <= 100; i++) pre[i] += pre[i - 1];
vector<int> res;
for (auto x : nums)
if (!x)
res.push_back(0);
else
res.push_back(pre[x - 1]);
return res;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。