数组的逆序对

思路:归并排序
每次把数组从中间拆分成两部分,先统计拆分数组内部的逆序对,再把这个数组排序,防止统计重复,最后再把拆分的数组合并,并统计合并过程中的逆序对。

Paste_Image.png

Paste_Image.png
 public int InversePairs(int [] array) {
           if(array==null||array.length==0)
                      return 0;
           int[] copy = new int[array.length];
        for (int i = 0; i < copy.length; i++) {
            copy[i] = array[i];
        }
        int count = InversePairsHelper(array, copy, 0, array.length - 1);
        return count;
 }
 public int InversePairsHelper(int [] array,int [] copy,int start,int end) {
         if(start==end){
             copy[end]=array[end];
             return 0;
         }
         int len=(end-start)/2;//
         int left=InversePairsHelper(array,copy,start,start+len);
         int right=InversePairsHelper(array,copy,start+len+1,end);
         int i=start+len;
         int j=end;
         int indexofCopy=end;
          
         while(i>=start&&j>start+len+1){
                if(array[i]>array[j]){
                     copy[indexofCopy--]=array[i--];
                     count+=j-start-len;
                }else{
                   copy[indexofCopy--]=array[j--];
                }
         }
            for(;i>=start;i--){
                     copy[indexofCopy--]=array[i--];
            }
            for(;j>=start+len+1;j--){
                 copy[indexofCopy--]=array[i--];
            }
       return left+right+count;
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数组系列文章也到尾声了,这是数组系列的最后一篇文章,后面就是树的内容了,如果后面又看到了相关的题目再作补充吧,欢迎...
    zero_sr阅读 3,382评论 0 2
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 5,356评论 1 4
  • 一. 写在前面 要学习算法,“排序”是一个回避不了的重要话题,在分析完并查集算法和常用数据结构之后,今天我们终于可...
    Leesper阅读 7,290评论 0 40
  • 艺术家混合了烟,动物和自然的图案,创造出双重曝光的视觉效果,灵气便产生了。 【大课美术设计有话说】: 烟雾本身就给...
    美术视觉阅读 4,676评论 0 3
  • 本文参加#感悟三下乡,青春筑梦行#活动,本人承诺,文章内容为原创,且未在其他平台发表过。 《老子》言:“授人以...
    小太烊啊阅读 2,701评论 0 2