315. Count of Smaller Numbers After Self

You are given an integer array nums and you have to return a new counts array. The counts array has the property where counts[i] is the number of smaller elements to the right of nums[i].

Example:

Input: [5,2,6,1]
Output: [2,1,1,0] 
Explanation:
To the right of 5 there are 2 smaller elements (2 and 1).
To the right of 2 there is only 1 smaller element (1).
To the right of 6 there is 1 smaller element (1).
To the right of 1 there is 0 smaller element.
Accepted
97,984
Submissions
244,852
 
基本思路 从后向前遍历,每遍历一个数把他放到一个数组里面,有序插入, 用二分是最快的.
用stl的函数用节省不少代码
 
class Solution {
public:
    vector<int> countSmaller(vector<int>& nums) {
        vector<int> after,res(nums.size());
        for(int i=nums.size()-1;i>=0;--i)
        {
            auto iter=lower_bound(after.begin(),after.end(),nums[i]);
            res[i]=iter-after.begin();
            after.insert(iter,nums[i]);
        }
        return res;
    }
};
原文地址:https://www.cnblogs.com/lychnis/p/11968238.html