1-1、合并两个有序数组

236 阅读1分钟

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]
function combine (nums1, m, nums2, n) {
	let index1 = m - 1;
	let index2 = n - 1;
	let maxIndex = m + n - 1;
 	while(index2 >= 0) {
    	if (index1 >= 0) {
        	nums1[maxIndex--] = nums1[index1] > nums2[index2] ? nums1[index1--] : nums2[index2--];
        } else {
        	nums1[maxIndex--] = nums2[index2--];
        }
    }
}

题目解析

  1. 循环并入的数组
  1. 两个数组的数值从后往前比较
  2. 把两个数组中最大的那个数值存入合并后的数组中最大索引的位置
  3. 然后在把比较出的最大值那个数组的索引减一,继续跟数值小的那个数组的当前索引位置的数值做比较。
  4. 保证了每次比较得出最大的数值存入数组中。
  5. 考虑两个临界情况
    • 被并入的数组的索引值先比较完即index的值小于0,剩下的要并入的数组的值,直接按位存入被并入后的数组中。
    • 要并入的数组的索引先比较完即index的值小于0,那就不需要再比较了,因为要并入的数据已经全部按照大小存入到被并入后的数组中。被并入数组没有接受比较的数值原位不动就行。