LeetCode--两个有序数组合并

2018-07-12  本文已影响0人  sjandroid

题目: 如何将两个有序数组合并成一个有序数组

思路:

1:首先初始化 辅助数组,该数组存储的是两个有序数组的所有数据。所以该数组的大小为 要合并的两个数组的容量之和。
2:依次遍历 数组1,判断数组1的内容是否比数组2的内容小,如果小的话 则把数组1的数据添加至 辅助数组中。如果大的话,则执行 步骤3。
3:依次遍历 数组2,判断数组2的内容是否比数组1的内容小,如果小的话 则把数组2的数据添加至辅助数组中。直至出现数组2的内容比数组1的内容大为止,此时执行 步骤2。
4:当执行完 步骤2,3之后,如果要合并的两数组的容量不一致,则会执行该步骤。首先需要判断是数组1还是数组2的内容已经全部添加至辅助数组,然后选择剩余的那个数组,并把其内容添加至辅助数组。


实现

     public static void main(String[] args){
        Method_1();
    }

    private static void Method_1() {
        Integer[] array1 = {2, 9, 3};
        Integer[] array2 = {6, 0, 10};
        Integer[] array3 = {2, 3, 9, 21, 30};
        Integer[] array4 = {-12, 0, 1, 2, 6, 10};

        //Integer[] result = MergeSort.mergeSort(array1, array2);
        //Util.print(result, "Method_1---合并后:");

        Integer[] result2 = Method_2(array3, array4);
        Util.print(result2, "Method_2---合并后:");
    }

    /**
     * 两个有序数组合并
     * @param array1 数组1
     * @param array2 数组2
     * @return
     */
    private static Integer[] Method_2(Integer[] array1, Integer[] array2) {
        Integer[] result = new Integer[array1.length + array2.length];

        int leftIndex = 0;
        int rightIndex = 0;
        int resultIndex = 0;
        while(leftIndex < array1.length && rightIndex < array2.length){
            result[resultIndex++] = array1[leftIndex] < array2[rightIndex] ? array1[leftIndex++] : array2[rightIndex++];
        }

        while(leftIndex < array1.length){
            result[resultIndex++] = array1[leftIndex++];
        }

        while(rightIndex < array2.length){
            result[resultIndex++] = array2[rightIndex++];
        }

        return result;
    }

Log

Method_2---合并后::-12---0---1---2---2---3---6---9---10---21---30
上一篇 下一篇

猜你喜欢

热点阅读