簡體   English   中英

合並兩個數組時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM