链接
https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/
耗时
解题:20 min
题解:4 min
题意
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
以数组形式返回答案。
思路
记录位置信息,然后排序,排序后的下标即是比这个数字小的数字的数目,唯一需要注意的是相同的数字的数目需要等于第一个数字的下标。
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
AC代码
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
int n = nums.size();
vector<pair<int, int>> p;
vector<int> ans(n);
for(int i = 0; i < n; ++i) {
p.push_back(make_pair(nums[i], i));
}
sort(p.begin(), p.end());
for(int i = 0; i < n; ++i) {
if(i > 0 && p[i].first == p[i-1].first) {
ans[p[i].second] = ans[p[i-1].second];
}
else {
ans[p[i].second] = i;
}
}
return ans;
}
};