Leetcode 1365. How Many Numbers Are Smaller Than the Current Number (cpp)

努利!奮鬥!發表於2021-01-03

題目

在這裡插入圖片描述

解法1:暴力

class Solution {
public:
    vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
        vector<int> ans;
        int count;
        for(int i=0;i<nums.size();i++){
            count = 0;
            for(int j=0;j<nums.size();j++){
                if(nums[j] < nums[i]) count++;
            }
            ans.push_back(count);
        }
        return ans;
    }
};

解法2:hashtable

這道easy題最開始居然沒有想到這個解法
利用一個hashtable,key是數字,value是他在排序後在陣列中位置,不包括他自己在內,所以比他小的剛好等於他的index。因為有重複的數字,所以只記下她第一次出現的時候即可。當然也可以把重複數字刪掉

class Solution {
public:
    vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
        vector<int> tmp = nums;
        sort(nums.begin(),nums.end());
        unordered_map<int,int> seen;
        for(int i=0;i<nums.size();i++){
            // only count it for the first time this number appeared
            if(seen.find(nums[i]) == seen.end()){
                seen[nums[i]] = i;
            }
        }
        vector<int> ans;
        for(auto num:tmp){
            ans.push_back(seen[num]);
        }
        return ans;
    }
};

相關文章