leetcode 1365. 有多少小于当前数字的数字

2023.9.2

leetcode 1365. 有多少小于当前数字的数字_第1张图片

        本题直观的解法就是双层for循环暴力求解:

暴力解:

class Solution {
public:
    vector smallerNumbersThanCurrent(vector& nums) {
        vector ans;
        for(int i=0; i

         上述解法中,元素之间进行了重复比较,可以进行优化:

暴力解(优化版):

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

        由于题中nums[i]给的范围是0~100,因此还可以以空间换时间,进一步优化:

哈希法:

class Solution {
public:
    vector smallerNumbersThanCurrent(vector& nums) {
        vector v(nums.begin(),nums.end());
        sort(v.begin(),v.end()); //排序之后,元素下标就是小于当前元素的个数
        int hash[101];

        for(int i=0; i0 && v[i]==v[i-1]) continue;
            hash[v[i]] = i;
        }

        for(int i=0; i

你可能感兴趣的:(leetcode专栏,leetcode,算法,职场和发展,c++,数据结构)