思路:
数组哈希。
定义一个新数组,将数组排个序。
排序之后,每一个数值的下标就代表这前面有几个比它小的了。
构造数组hash的时候,从后向前遍历,相同元素时只保留最左面的数值和下标。
因为sort是不稳定排序
参考资料:
【爱上C++】vector用法详解_c++中vector的用法详解-优快云博客
vector的初始化有迭代器除了迭代器初始化还有直接赋值初始化。
还有sort底层是快排,是不稳定的排序。
问题重点:
最后:
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
int n=nums.size();
vector<int> vec=nums;
//vector<int> vec(nums.begin(),nums.end());//迭代器初始化
sort(vec.begin(),vec.end());
vector<int> hash(101,0);
for (int i=n-1;i>=0;i--) {//从后往前遍历,相同元素的话保留最左边的。
hash[vec[i]]=i;//数组哈希,覆盖全范围,元素:比他小的数量
}
vector<int> res(n,0);
for (int i=0;i<n;i++) {
res[i]=hash[nums[i]];
}
return res;
}
};

2671

被折叠的 条评论
为什么被折叠?



