题解 | #数组中的逆序对#

数组中的逆序对

http://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5

  1. 首先是归并。然后归并的时候进行比较
class Solution {
public:
    int count = 0;
    int InversePairs(vector<int> data) {
        if(data.size()<2) return 0;
        // 长度小于2则无逆序对

        mergeSort(data,0,data.size()-1);

        return count;

    }

    void mergeSort(vector<int>& data, int left, int right){

        int mid = (left+right)/2;

        if(left<right){
            //
            mergeSort(data,left,mid);
            mergeSort(data,mid+1,right);

            merge(data,left,mid,right);

        }
    }


    void merge(vector<int>& data, int left,int mid, int right){

        vector<int> arr(right - left+1,0);
        int i = left, j = mid+1, k = 0, origin = left;


        while(i<=mid&&j<=right){
            if(data[i]<=data[j]){
                arr[k++] = data[i++];
            }else{
                arr[k] = data[j];

                count += mid+1-i;
                count %= 1000000007;

                k++;
                j++;

            }
        }

        // 左子数组还有元素时,全部放入临时数组
        for(;i<=mid;){
            arr[k++] = data[i++];
        }
        // 右子数组还有元素时,全部放入临时数组
         for(;j<=right;){
            arr[k++] = data[j++];
        }
        // 将临时数组中的元素放入到原数组的指定位置
        for(int num:arr){
            data[origin++] = num;
        }

    }
};
大厂笔试题题解 文章被收录于专栏

主要是公司笔试题得一些总结

全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
这算盘打的
程序员小白条:都这样的,都是潜规则,你自己说可以实习一年就行了,实习可以随便跑路的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务