Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 鉴于arr1&;已按降序排序的arr2输出一个数组,该数组按降序追加来自arr1和arr2的值 public int[]join(int[]arr1,int[]arr2){ int[]joinArr=新int[arr1.length+arr2.length]; int j=0,k=0; 对于(int i=0;iarr2[k]){ joinArr[i]=arr1[j]; j++; } 否则{ joinArr[i]=arr2[k]; k++; } } 返回接头; }_Java_Arrays - Fatal编程技术网

Java 鉴于arr1&;已按降序排序的arr2输出一个数组,该数组按降序追加来自arr1和arr2的值 public int[]join(int[]arr1,int[]arr2){ int[]joinArr=新int[arr1.length+arr2.length]; int j=0,k=0; 对于(int i=0;iarr2[k]){ joinArr[i]=arr1[j]; j++; } 否则{ joinArr[i]=arr2[k]; k++; } } 返回接头; }

Java 鉴于arr1&;已按降序排序的arr2输出一个数组,该数组按降序追加来自arr1和arr2的值 public int[]join(int[]arr1,int[]arr2){ int[]joinArr=新int[arr1.length+arr2.length]; int j=0,k=0; 对于(int i=0;iarr2[k]){ joinArr[i]=arr1[j]; j++; } 否则{ joinArr[i]=arr2[k]; k++; } } 返回接头; },java,arrays,Java,Arrays,Testcase1参数 {100,90,80,70,60}{105,95,85,75,65} 测试用例1实际答案 {105100,95,90,85,80,75,70,65,60} 测试用例1预期答案 {105100,95,90,85,80,75,70,65,60} Testcase2参数 {100,90,80,70,60}{105} 测试用例2实际答案 {105100100} 测试用例2预期答案 {105100,90,80,70,60} 当我运行Testcase2时,它没有给出预期的答案,我如何

Testcase1参数

{100,90,80,70,60}
{105,95,85,75,65}

测试用例1实际答案

{105100,95,90,85,80,75,70,65,60}

测试用例1预期答案

{105100,95,90,85,80,75,70,65,60}

Testcase2参数

{100,90,80,70,60}
{105}

测试用例2实际答案

{105100100}

测试用例2预期答案

{105100,90,80,70,60}


当我运行Testcase2时,它没有给出预期的答案,我如何解决这个问题?

您有4种可能的结果。在最后两个结果中,当从
arr1[j]
arr2[k]

你必须对所有结果都做同样的事情,否则你只会重复你达到的价值

顺便说一句,我建议你

  • 使用IDE中的代码格式化程序使代码更具可读性
  • 使用IDE中的调试器单步执行代码,以便了解它在做什么
尝试以下方法:

public int[] join(int[] arr1,int[] arr2){

    int[] joinArr=new int[arr1.length + arr2.length];
    int j=0,k=0;
    for(int i=0;i<joinArr.length;i++){
        if(j==arr1.length){
            joinArr[i]=arr2[k];
        }
        else if(k==arr2.length){
            joinArr[i]=arr1[j];
        }
        else if(arr1[j]>arr2[k]){
            joinArr[i]=arr1[j];
            j++;
        }
        else{
            joinArr[i]=arr2[k];
        k++;
        }

    }    

    return joinArr;

}
公共静态int[]join(int[]arr1,int[]arr2){
int[]joinArr=新int[arr1.length+arr2.length];
int i=0,j=0,k=0;

而@PallaviSingh的(i)可能重复项在两种情况下(而不是前两种情况下)从该索引复制值后,您会增加
j
k
。您应该始终如一地这样做,并且应该首先使用调试器调试代码。
public static int[] join(int[] arr1,int[] arr2){
        int[] joinArr=new int[arr1.length + arr2.length];
        int i=0,j=0,k=0;
        while(i<arr1.length && j<arr2.length){  // coping from both the array while one of them is exhausted
            if( arr1[i]>arr2[j]){
                joinArr[k++]=arr1[i++]; // coping from arr1 and update the index i and k.
            }else if(arr1[i]<arr2[j]){
                joinArr[k++]=arr2[j++]; // coping from arr2 and update the index j and k.
            }else{
                joinArr[k++]=arr2[j++]; // coping from any of arr1  or arr2 and update the index i,j and k. 
                i++;
            }


        }  
        if(i<arr1.length){  // coping from  the array arr1 since arr2 is exhausted

             while(i<arr1.length ){
                 joinArr[k++]=arr1[i++];
             }
        }

        if(j<arr2.length){  // coping from  the array arr2 since arr1 is exhausted

             while(j<arr2.length ){
                 joinArr[k++]=arr2[j++];
             }
        }

        return Arrays.copyOf(joinArr, k);

    }