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