java算法_有序数组合并

无序数组合并:

    public static void main(String[] args) {
        String[] str1 = {"1","2","3","7"};
        String[] str2 = {"4","5","6"};
        int str1Length = str1.length;
        int str2length = str2.length;
        str1 = Arrays.copyOf(str1, str1Length+str2length);//数组扩容
        System.arraycopy(str2, 0, str1, str1Length, str2length);
        System.out.println(Arrays.toString(str1));
    }

有两个有序数组,合并成一个有序数组,例如:arr1={1,3,4,7} arr2={2,5,8} 合并后为 {1,2,3,4,5,7,8} ,要求时间复杂度最小

有序数组合并:

   public static void main(String[] args) {
        int[] num1 = new int[]{1,3,4,7};
        int[] num2 = new int[]{2,5,8};
        int[] sum3 = new int[num1.length + num2.length];//定义一个新的数组,然后做对比后往新的数组中插入数据
        int a = 0, b = 0;
        for (int i = 0; i < sum3.length; i++) {//新数组for循环,次数等于数组长度
            if (a < num1.length && b < num2.length) {//if条件的含义:两个数组中数没有取完可以做对比
                if (num1[a] > num2[b]) {//如果a下标比b下标的数组大,b放到新数组中,b+1
                    sum3[i] = num2[b];
                    b++;
                } else {//反之,a下标数字比b小,a放到新数组中,a+1
                    sum3[i] = num1[a];
                    a++;
                }
            } else if (a < num1.length) {//如果不满足a < num1.length && b < num2.length说明有一个数字取完了数字,b取完,可以直接a放入新数组
                sum3[i] = num1[a];
                a++;
            } else if (b < num2.length) {//a取完,可以直接b放入新数组
                sum3[i] = num2[b];
                b++;
            }
        }
        System.out.println(Arrays.toString(sum3));
    }

你可能感兴趣的:(java算法_有序数组合并)