315 Count of Smaller Numbers After Self 计算右侧小于当前元素的个数

给定一个整型数组 nums,按要求返回一个新的 counts 数组。数组 counts 有该性质: counts[i] 的值是  nums[i] 右侧小于nums[i] 的元素的数量。
例子:
给定 nums = [5, 2, 6, 1]
5的右侧有2个更小的元素 (2 和 1).
2的右侧仅有1个更小的元素 (1).
6的右侧有1个更小的元素 (1).
1的右侧有0个更小的元素.
返回数组 [2, 1, 1, 0].
详见:https://leetcode.com/problems/count-of-smaller-numbers-after-self/description/

class Solution {
public:
    vector<int> countSmaller(vector<int>& nums) {
        vector<int> t,res(nums.size());
        for(int i=nums.size()-1;i>=0;--i)
        {
            int left=0,right=t.size();
            while(left<right)
            {
                int mid=left+(right-left)/2;
                if(t[mid]>=nums[i])
                {
                    right=mid;
                }
                else
                {
                    left=mid+1;
                }
            }
            res[i]=right;
            t.insert(t.begin()+right,nums[i]);
        }
        return res;
    }
};

 参考:https://www.cnblogs.com/grandyang/p/5078490.html

posted on 2018-04-14 13:28  lina2014  阅读(602)  评论(0编辑  收藏  举报

导航