本文主要是介绍合并两个有序数组(Java原址实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
合并两个有序数组
题目
合并两个有序数组(力扣:88)
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
分析
题目中,数组1有足够的空间来存放数组2的元素。
因为两个数组都是有序的,所以我们使用2个指针,分别指向两个数组中的元素,依次对比元素值,按序列添加到数组1中即可。
但这里需要注意,如果从小到大比较,因为数组1中m个元素都存储在数组的左端,可能会没有足够空间(或者需要大量移动),所以我们从最右端(m+n-1)这个位置开始存放元素,也就是从大到小查找元素,这样右侧有足够的空间存放数组2,所以不用担心num1中原有元素被覆盖的问题。
代码实现
/*** 88. 合并两个有序数组* @param nums1* @param m* @param nums2* @param n*/public void merge(int[] nums1, int m, int[] nums2, int n) {if (nums2 == null || nums2 == null) {return;}int index = m + n - 1;m--;n--;while (m >= 0 && n >= 0) {nums1[index--] = nums1[m] > nums2[n] ? nums1[m--] : nums2[n--];}while (n >= 0) {nums1[index--] = nums2[n--];}}
这篇关于合并两个有序数组(Java原址实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!