如何合并和列印兩個沒有任何重復的排序陣列?我嘗試過但無法找到任何有效的解決方案。
public static void mergeSortedArrays(int a[], int b[]) {
int[] answer = new int[a.length b.length];
int i = 0, j = 0, k = 0;
while (i < a.length && j < b.length)
answer[k ] = a[i] < b[j] ? a[i ] : b[j ];
while (i < a.length)
answer[k ] = a[i ];
while (j < b.length)
answer[k ] = b[j ];
System.out.print(answer);
}
uj5u.com熱心網友回復:
您說兩個陣列都已排序,我假設合并后的陣列也需要排序。
這是代碼。解釋如下。
import java.util.Arrays;
public class Test {
private static int[] mergeSortedArrays(int[] a, int[] b) {
int[] temp = new int[a.length b.length];
int i = 0;
int j = 0;
int k = 0;
while (i < a.length) {
if (j < b.length) {
if (a[i] < b[j]) {
temp[k ] = a[i ];
}
else if (a[i] == b[j]) {
temp[k ] = a[i ];
j ;
}
else {
temp[k ] = b[j ];
}
}
else {
temp[k ] = a[i ];
}
}
if (j < b.length) {
for (; j < b.length; j ) {
temp[k ] = b[j];
}
}
int[] answer = new int[k];
System.arraycopy(temp, 0, answer, 0, k);
return answer;
}
public static void main(String[] args) {
int[] a = {-19, -5, -4, 3, 7, 8, 11, 21};
int[] b = {-7, -5, -4, 0, 3, 6, 11, 13, 20};
System.out.println(Arrays.toString(mergeSortedArrays(a, b)));
}
}
我們將第一個陣列中的元素與第二個陣列中的元素進行比較。兩者中較小的被復制到結果陣列中。然后我們增加其元素被復制到結果陣列的陣列的索引。如果元素相等,我們[任意]從第一個陣列復制元素并增加兩個陣列的索引。這可以防止結果陣列包含重復項。
如果陣列的元素數量不同,那么當我們用完一個陣列時,我們只需將較長陣列中的所有剩余元素復制到結果陣列中。
因此結果陣列包含來自兩個陣列的所有元素,沒有重復,排序。
這是我運行上述代碼時的輸出。
[-19, -7, -5, -4, 0, 3, 6, 7, 8, 11, 13, 20, 21]
uj5u.com熱心網友回復:
根據您的代碼,輸出中會有重復項。要洗掉重復項,您需要在第一次將條件修改為:
while (i < a.length && j < b.length)
answer[k ] = a[i] <= b[j] ? a[i ] : b[j ];
這將跳過其他陣列中的一個副本。
還需要檢查輸出陣列是否已經包含前一個索引中的相同元素并跳過它。
while (i < a.length && j < b.length) {
if(answer[k] == a[i])
i ;
else if(answer[k] == b[j])
j ;
else
answer[k ] = a[i] <= b[j] ? a[i ] : b[j ];
}
其他時間也一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/399174.html
