1.题目: (合并两个有序数组)
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
2. 示例
3.解答步骤
思路都在注释上! 请大家自主阅读程序!
⭐ 本篇注意点: 本题主要思想
答: 因为要将两个⭐有序数组,归并且保持有序。则需要对比两个数组的元素值,较小的一个放到临时数组,并且移动下标,依次对比,完成归并有序数组。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
// 创建一个用于存放合并排序后的数组
int[] tempArray = new int[m + n];
// 创建一个用于遍历i,j的下标
int i,j;
i=j=0;
// 创建一个temp数组的下标
int tempIndex=0;
// 进行一个while循环
// 依次从两个数组的初始位置开始比较
// 将较小的一方放到临时数组
while(i<m && j<n) {
if(nums1[i] < nums2[j]) {
tempArray[tempIndex++] = nums1[i++];
} else {
tempArray[tempIndex++] = nums2[j++];
}
}
// 假如有一个数组遍历完
// 而另一个数组并不空时
// 应当将这个数组的值全部放进tempArray
for( ; i<m;) {
tempArray[tempIndex++] = nums1[i++];
}
for(; j<n; ) {
tempArray[tempIndex++] = nums2[j++];
}
// 将合并归并好的数组赋值给nums1
for(int k=0; k<m+n; k++) {
nums1[k] = tempArray[k];
}
}
}