国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 晋江市| 铜川市| 铜陵市| 贵南县| 南康市| 禹城市| 都江堰市| 巴彦淖尔市| 宜兰县| 轮台县| 德阳市| 濉溪县| 辽阳县| 嘉义市| 右玉县| 元朗区| 鄂托克前旗| 玉门市| 锦州市| 历史| 阳原县| 新宾| 夹江县| 都安| 睢宁县| 赫章县| 正宁县| 东丽区| 南阳市| 新邵县| 贞丰县| 富顺县| 长泰县| 韩城市| 马尔康县| 武平县| 屏山县| 富锦市| 崇左市| 平谷区| 荣成市|