题解 | #字符串的排列#

数组中的逆序对

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

两种写法都能过,
简单方法就是,复制一份数组并排序,然后遍历这个有序的数组,比如第一个最小值为0,在原数组中查看0的索引,就可以得到关于0的逆序对;之后将0从原数组移除,继续遍历。
归并排序,不重复大牛的说法了,坐到0bug,一遍过就行。

import java.util.*;
public class Solution {
    int res = 0;
    public int InversePairs(int [] array) {

//             int[] sort = new int[array.length];
//             System.arraycopy(array, 0, sort,0 ,array.length);
//              Arrays.sort(sort);
//             int res = 0;
//             ArrayList<Integer> arrayList =  new ArrayList<Integer>();
//             for (int i : array) {
//                 arrayList.add(i);
//             }


//             for(int i =0;i<sort.length;i++){
//                 int index = arrayList.indexOf(sort[i]);

//                 res += index;
//                 res = res%1000000007;
//                 arrayList.remove(index);
//             }
//             return res%1000000007;
        sort(array,0,array.length-1);
        return res;
    }
    public void sort(int [] array, int l, int r) {
        if(array.length == 0 || l == r){
            return;
        }
        int mid = l + (r-l)/2;
        sort(array, l, mid);
        sort(array, mid+1, r);
        merge(array, l, mid, r);
    }
    public void merge(int [] array,int l, int mid, int r) {
        int i = l;
        int j =mid+1;
        int t =0;
        int[] temp = new int[r-l+1];
        while(i<=mid && j<= r){
            if(array[i] <= array[j]){
                temp[t++] = array[i++];
            }else{
                res += (mid-i+1);
                res = res% 1000000007;
                temp[t++] = array[j++];
            }
        }
        while(i<=mid){
             temp[t++] = array[i++];
        }
        while(j<=r){
             temp[t++] = array[j++];
        }
        System.arraycopy(temp,0, array,l, temp.length);
    }
}
全部评论

相关推荐

下北泽:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务