zoukankan      html  css  js  c++  java
  • 算法-分治

    1.给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是  nums[i] 右侧小于 nums[i] 的元素的数量。

    示例:

    输入: [5,2,6,1]
    输出: [2,1,1,0]
    解释:
    5 的右侧有 2 个更小的元素 (2 和 1).
    2 的右侧仅有 1 个更小的元素 (1).
    6 的右侧有 1 个更小的元素 (1).
    1 的右侧有 0 个更小的元素.

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/count-of-smaller-numbers-after-self
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    class Solution {   
    public:
        vector<int> countSmaller(vector<int>& nums) {
            vector<int> counts;  
            vector<pair<int,int>> v;
            int n=nums.size();
            for(int i=0;i<n;++i){
                v.push_back(make_pair(nums[i],i));
                counts.push_back(0);
            }
            merge_sort(v,counts);
            return counts;
        }
        
        void merge_sort(vector<pair<int,int>>& v,vector<int>& counts){
            if(v.size()<2) return;
            int mid=v.size()/2;
            vector<pair<int,int>> subvec1(v.begin(),v.begin()+mid);
            vector<pair<int,int>> subvec2(v.begin()+mid,v.end());
            merge_sort(subvec1,counts);
            merge_sort(subvec2,counts);
            v.clear();
            combine(subvec1,subvec2,v,counts);
        }
        void combine(vector<pair<int,int>>& subvec1,vector<pair<int,int>>& subvec2,vector<pair<int,int>>& vec,vector<int>& counts){
            int i=0,j=0;
            while(i<subvec1.size() && j<subvec2.size()){
                if(subvec1[i].first<=subvec2[j].first){
                    vec.push_back(subvec1[i]);
                    counts[subvec1[i].second]+=j;
                    i++;
                }else{
                    vec.push_back(subvec2[j]);
                    j++;
                }
            }
            if(i<subvec1.size()){
                for(;i<subvec1.size();i++){
                    counts[subvec1[i].second]+=j;
                    vec.push_back(subvec1[i]);  
                }  
            }
            if(j<subvec2.size()){
                for(;j<subvec2.size();j++){
                    vec.push_back(subvec2[j]);  
                }  
            }
        }
    };
  • 相关阅读:
    ie的bug及兼容性
    解决多次include后全局变量global失效的问题
    针对MYISAM表锁的解决方案(转)
    解决二进制文件冲突
    linux基本命令(1) 开关机操作
    子网掩码(NETMASK),ip地址,默认网关
    linux中常见设备对照表
    解决base64通过http传输后+变空格的问题
    mysql 查询某值是否存在于某结果集或表中
    laravel 报错 No query results for model
  • 原文地址:https://www.cnblogs.com/chendaniu/p/11074419.html
Copyright © 2011-2022 走看看