[英]Error while merging two arrays
我有兩個排序的數組arr1和arr2,並且我試圖將這兩個數組合並到另一個數組“輸出”中。 但是問題是,如果第一個數組用盡,即數組arr1被完全使用,那么'i'的值將大於數組的長度,因此在下一次迭代中arr [i]會給出錯誤。 如何避免這種情況?
int i=0;
int j=0;
for(int k=0;k<output.length;k++) {
if(arr1[i]<arr2[j]) {
output[k]=arr1[i];
i++;
}
else{
output[k]=arr2[j];
j++;
}
}
您需要檢查數組是否用盡:
int i=0;
int j=0;
for(int k=0;k<output.length;k++) {
if(i < arr1.length && j < arr2.length) {
// both arrays still have unused elements
if (arr1[i]<arr2[j]) {
output[k]=arr1[i];
i++;
} else {
output[k]=arr2[j];
j++;
}
} else if (i < arr1.length) {
// only the first array has unused elements
output[k]=arr1[i];
i++;
} else if (j < arr2.length) {
// only the second array has unused elements
output[k]=arr2[j];
j++;
}
}
我們可以利用以下事實:不必檢查k的值,因為輸出數組的長度等於arr1和arr2的長度之和。 一旦兩個數組中的任何一個元素用盡,我們就從main for循環退出(因此條件i <arr1.length && j <arr2.length)。 現在,由於其中一個數組已用盡,我們只需要將另一個數組的所有剩余元素轉儲到輸出數組中。 因此,我們檢查條件i = arr1.length,如果為true,則意味着j等於arr2.length,因此arr2已耗盡,並且arr1的元素必須轉儲到輸出數組中。 否則,我們將其余的arr2元素轉儲到輸出數組中。
int i=0;
int j=0;
for(int k=0;i<arr1.length && j < arr2.length ;k++) {
if(arr1[i]<arr2[j]) {
output[k]=arr1[i];
i++;
}
else{
output[k]=arr2[j];
j++;
}
}
if(i != arr1.length){
for(; i < arr1.length; i++,k++)
output[k]=arr1[i];
}
else{
for(; j < arr2.length; j++,k++)
output[k]=arr2[j];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.