国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

java簡單實現數組中的逆序對

2024-07-14 08:43:57
字體:
來源:轉載
供稿:網友

題目描述:

在數組中的兩個數字,如果前面一個數字大于后面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。并將P對1000000007取模的結果輸出。 即輸出P%1000000007

解題思路:

一開始一頭霧水,后面想到了使用歸并排序的思想,其實有多少個逆序對,就是歸并排序的時候,后面的數要超越前面多少個,嗯,好像不是很好說,要不然直接看代碼吧。還要注意,題目當中說要輸出取模的結果,這說明數據可能非常大,所以如果只是單純的在最后取模的話可能還是無法避免數據太大的影響,所以我們在每次更新count的時候就對其進行取模運算。

剛好又練習了一遍歸并排序,記錄一下

public class Solution {  int count;  public int InversePairs(int [] array) {    count = 0;    if(array != null){      divPairs(array, 0, array.length-1);    }    return count%1000000007;  }    public void divPairs(int[] array, int start, int end){    if(start >= end)      return;    int mid = (start + end)>>1;    divPairs(array, start, mid);    divPairs(array, mid+1, end);        mergePairs(array, start, mid, end);  }    public void mergePairs(int[] array, int start, int mid, int end){    int i = start, j = mid+1, k = 0;    int[] temp = new int[end-start+1];    while(i <= mid && j <= end){      if(array[i] <= array[j]){        temp[k++] = array[i++];      }else{        temp[k++] = array[j++];        count += mid - i + 1;        count %= 1000000007;      }    }    while(i <= mid){      temp[k++] = array[i++];    }    while(j <= end){      temp[k++] = array[j++];    }    for(int x = 0; x < temp.length; x++){      array[start+x] = temp[x];    }  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黔江区| 丰县| 武义县| 黄龙县| 城固县| 临沭县| 苏尼特左旗| 青川县| 慈溪市| 皋兰县| 塔河县| 湖州市| 左贡县| 临安市| 普兰店市| 安乡县| 岚皋县| 辽源市| 于田县| 南平市| 京山县| 灌南县| 佛坪县| 吴桥县| 仙游县| 广河县| 凤阳县| 西乌珠穆沁旗| 中阳县| 杭州市| 绍兴市| 大安市| 安平县| 红河县| 普定县| 河南省| 建水县| 郴州市| 鹤峰县| 福安市| 舒兰市|