java實現(xiàn)數(shù)組中的逆序?qū)?/h1>
更新時間:2019年03月03日 16:41:47 作者:雨幕下的稻田
這篇文章主要為大家詳細介紹了java實現(xiàn)數(shù)組中的逆序?qū)Γ哂幸欢ǖ膮⒖純r值,感興趣的小伙伴們可以參考一下
在數(shù)組中的兩個數(shù)字,如果前面一個數(shù)字大于后面的數(shù)字,則這兩個數(shù)字組成一個逆序?qū)Γ缭跀?shù)組{7,5,6,4}中,一共存在5對逆序?qū)?,分別是{7,6},{7,5},{7,4},{6,4},{5,4}。輸入一個數(shù)組,求出這個數(shù)組中的逆序?qū)Φ目倲?shù)P。并將P對1000000007取模的結(jié)果輸出。,即輸出P%1000000007。
代碼
解法一
暴力簡單低效,不會改變原數(shù)組
public static int inversePairs(int[] array) {
if (array == null || array.length < 2) {
return 0;
}
int count = 0;
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] > array[j]) {
count++;
}
}
}
return count % 1000000007;
}
解法二
利用數(shù)組的歸并排序,高效,但是會改變原數(shù)組
public static int inversePairs2(int[] array) {
if (array == null || array.length < 2) {
return 0;
}
int count = mergeSort(array, 0, array.length - 1);
return count % 1000000007;
}
private static int mergeSort(int[] array, int start, int end) {
if (start >= end) {
return 0;
}
// 找到數(shù)組的中點,分割為兩個子數(shù)組,遞歸求解
int middle = (start + end) / 2;
int left = mergeSort(array, start, middle);
int right = mergeSort(array, middle + 1, end);
// 存儲歸并后的數(shù)組
int[] copy = new int[array.length];
System.arraycopy(array, start, copy, start, end - start + 1);
// 從兩個子數(shù)組的尾部開始遍歷
int i = middle;
int j = end;
int copyIndex = end;
// 記錄逆序?qū)Φ臄?shù)量
int count = 0;
while (i >= start && j >= middle + 1) {
// 數(shù)組是升序的
// 如果左邊數(shù)組比右邊數(shù)組大,則將大的放入存儲數(shù)組中
// 并且累加逆序?qū)?,應為是有序的,所以左邊?shù)組的第i個元素比第j個及其之前的數(shù)都大
if (array[i] > array[j]) {
copy[copyIndex--] = array[i--];
count += (j - middle);
} else {
copy[copyIndex--] = array[j--];
}
}
// 將子數(shù)組剩余的部分一次寫入歸并后的存儲數(shù)組
while (i >= start) {
copy[copyIndex--] = array[i--];
}
while (j >= middle + 1) {
copy[copyIndex--] = array[j--];
}
// 將本次兩個子數(shù)組的合并寫入原數(shù)組中
for (int k = start; k <= end ; k++) {
array[k] = copy[k];
}
return left + right + count;
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
-
jmeter接口測試教程及接口測試流程詳解(全網(wǎng)僅有)
Jmeter是由Apache公司開發(fā)的一個純Java的開源項目,即可以用于做接口測試也可以用于做性能測試。本文給大家分享jmeter接口測試教程及接口測試流程,感興趣的朋友跟隨小編一起看看吧 2021-12-12
-
Java用三元運算符判斷奇數(shù)和偶數(shù)的簡單實現(xiàn)
這篇文章主要介紹了Java用三元運算符判斷奇數(shù)和偶數(shù)的簡單實現(xiàn),需要的朋友可以參考下 2014-02-02
-
Java數(shù)據(jù)結(jié)構(gòu)之隊列與OJ題
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之隊列與OJ題,本文章先是對隊列進行介紹,后又介紹了四道OJ相關(guān)的題目,來使其深入理解,需要的朋友可以參考下 2023-01-01
-
Java Idea TranslationPlugin翻譯插件使用解析
這篇文章主要介紹了Java Idea TranslationPlugin翻譯插件使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下 2020-04-04
-
Java工作環(huán)境的配置與Eclipse的安裝過程
這篇文章主要介紹了Java工作環(huán)境的配置與Eclipse的安裝過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下 2021-02-02
最新評論
在數(shù)組中的兩個數(shù)字,如果前面一個數(shù)字大于后面的數(shù)字,則這兩個數(shù)字組成一個逆序?qū)Γ缭跀?shù)組{7,5,6,4}中,一共存在5對逆序?qū)?,分別是{7,6},{7,5},{7,4},{6,4},{5,4}。輸入一個數(shù)組,求出這個數(shù)組中的逆序?qū)Φ目倲?shù)P。并將P對1000000007取模的結(jié)果輸出。,即輸出P%1000000007。
代碼
解法一
暴力簡單低效,不會改變原數(shù)組
public static int inversePairs(int[] array) {
if (array == null || array.length < 2) {
return 0;
}
int count = 0;
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] > array[j]) {
count++;
}
}
}
return count % 1000000007;
}
解法二
利用數(shù)組的歸并排序,高效,但是會改變原數(shù)組
public static int inversePairs2(int[] array) {
if (array == null || array.length < 2) {
return 0;
}
int count = mergeSort(array, 0, array.length - 1);
return count % 1000000007;
}
private static int mergeSort(int[] array, int start, int end) {
if (start >= end) {
return 0;
}
// 找到數(shù)組的中點,分割為兩個子數(shù)組,遞歸求解
int middle = (start + end) / 2;
int left = mergeSort(array, start, middle);
int right = mergeSort(array, middle + 1, end);
// 存儲歸并后的數(shù)組
int[] copy = new int[array.length];
System.arraycopy(array, start, copy, start, end - start + 1);
// 從兩個子數(shù)組的尾部開始遍歷
int i = middle;
int j = end;
int copyIndex = end;
// 記錄逆序?qū)Φ臄?shù)量
int count = 0;
while (i >= start && j >= middle + 1) {
// 數(shù)組是升序的
// 如果左邊數(shù)組比右邊數(shù)組大,則將大的放入存儲數(shù)組中
// 并且累加逆序?qū)?,應為是有序的,所以左邊?shù)組的第i個元素比第j個及其之前的數(shù)都大
if (array[i] > array[j]) {
copy[copyIndex--] = array[i--];
count += (j - middle);
} else {
copy[copyIndex--] = array[j--];
}
}
// 將子數(shù)組剩余的部分一次寫入歸并后的存儲數(shù)組
while (i >= start) {
copy[copyIndex--] = array[i--];
}
while (j >= middle + 1) {
copy[copyIndex--] = array[j--];
}
// 將本次兩個子數(shù)組的合并寫入原數(shù)組中
for (int k = start; k <= end ; k++) {
array[k] = copy[k];
}
return left + right + count;
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jmeter接口測試教程及接口測試流程詳解(全網(wǎng)僅有)
Jmeter是由Apache公司開發(fā)的一個純Java的開源項目,即可以用于做接口測試也可以用于做性能測試。本文給大家分享jmeter接口測試教程及接口測試流程,感興趣的朋友跟隨小編一起看看吧2021-12-12
Java用三元運算符判斷奇數(shù)和偶數(shù)的簡單實現(xiàn)
這篇文章主要介紹了Java用三元運算符判斷奇數(shù)和偶數(shù)的簡單實現(xiàn),需要的朋友可以參考下2014-02-02
Java數(shù)據(jù)結(jié)構(gòu)之隊列與OJ題
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之隊列與OJ題,本文章先是對隊列進行介紹,后又介紹了四道OJ相關(guān)的題目,來使其深入理解,需要的朋友可以參考下2023-01-01
Java Idea TranslationPlugin翻譯插件使用解析
這篇文章主要介紹了Java Idea TranslationPlugin翻譯插件使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
Java工作環(huán)境的配置與Eclipse的安裝過程
這篇文章主要介紹了Java工作環(huán)境的配置與Eclipse的安裝過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02

