leetcode-华为专题-1365. 有多少小于当前数字的数字

 

 

/*
    暴力法,
*/
/*
class Solution {
public:
    vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
        vector<int> res(nums.size());
        for(int i = 0; i < nums.size(); i++){
            int l = 0; 
            int r = nums.size()-1;
            int cnt = 0;
            while(l<i){
                if(nums[l]<nums[i])
                    cnt++;
                l++;
            }
            while(r>i){
                if(nums[r]<nums[i])
                    cnt++;
                r--;
            }
            res[i] = cnt;
        }
        return res;
    }
};
*/

class Solution {
public:
    vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
        vector<int> res = nums;
        unordered_map<int, int> in_map;
        sort(res.begin(), res.end()); // 排序以后下标就是数组中比当前元素小的个数
        // for(int i = 0; i < res.size(); i++){
        //     in_map[res[i]] = i; // 保存排序后下标
        // }
        for(int i = res.size()-1; i >=0; i--){ // 从后往前这个太经典了
            in_map[res[i]] = i; // 保存排序后下标
        }
        for(int i = 0; i < nums.size(); i++){
            res[i] = in_map[nums[i]];
        }
        return res;
    }
};

 

posted @ 2021-10-10 14:22  三一一一317  阅读(43)  评论(0)    收藏  举报