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

题目:给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。

以数组形式返回答案。

示例 :

输入:nums = [8,1,2,2,3]
输出:[4,0,1,1,3]
解释:
对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。
对于 nums[1]=1 不存在比它小的数字。
对于 nums[2]=2 存在一个比它小的数字:(1)。
对于 nums[3]=2 存在一个比它小的数字:(1)。
对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。

1.原创

class Solution {
public:
    vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
        vector<int> old_nums(nums); //vector赋值
        sort(nums.begin(), nums.end()); //排序
        vector<int> res;
        for (auto i:old_nums){
            vector<int>::iterator it = find(nums.begin(),nums.end(),i);
            int index=&*it-&nums[0];
            res.push_back(index);
        }
        return res;
    }
};

2.题解

class Solution {
public:
    vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
        vector<int> ans;//记录每次遍历后的比当前数大的结果
        for(int i=0;i<nums.size();i++){
            int temp=0;//保存比当前数小的数的个数
            int left=i-1;//当前数的左边的数
            int right=i+1;//当前数的右边的数
            //向左查找
            while(left>=0){
                //如果左边的数比当前数小,temp++
                if(nums[i]>nums[left]) temp++;
                //继续向左移动
                left--;
            }
            //向右查找
            while(right<nums.size()){
                //如果右边的数比当前数小,temp++
                if(nums[i]>nums[right]) temp++;
                //继续向右移动
                right++;
            }
            //把比当前数小的个数存入数组
            ans.push_back(temp);
        }
        //返回最后的结果
        return ans;        

    }
};

作者:solitary-scorpio
链接:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/solution/you-duo-shao-xiao-yu-dang-qian-shu-zi-de-shu-zi-10/
原文地址:https://www.cnblogs.com/USTC-ZCC/p/14451045.html