最朴素的方法:二重循环
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
int len=nums.size(), sum=0;
vector<int> re;
for(int i=0;i<len;++i){
sum=0;
for(int j=0;j<len;++j){
if(j!=i && nums[j]<nums[i]) ++sum;
}
re.push_back(sum);
}
return re;
}
};
***计数排序
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
int len=nums.size(), cnt[101];
memset(cnt,0,sizeof(cnt));
for(int i=0;i<len;++i) cnt[nums[i]]++; //计数
for(int i=1;i<101;i++) cnt[i]+=cnt[i-1]; //累加,cnt[i]=小于等于i的个数
vector<int> re;
for(int i=0;i<len;++i){
if(nums[i]==0) re.push_back(0);
else re.push_back(cnt[nums[i]-1]); //推入cnt[i-1],即小于i的个数
}
return re;
}
};