美文网首页
合并两个有序数组

合并两个有序数组

作者: WAI_f | 来源:发表于2020-07-04 02:25 被阅读0次

题目:

给你两个有序整数数组 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]

解题方法:

因为nums1数组后面部分元素没有使用,所以从后向前合并数组可以减少数组元素移动的次数。
程序的主要流程:

  • 判断nums1和nums2最大元素的大小,较大的数存进nums1的最后位置;
  • 根据第一步更新下一个参与比较的数据,然后重复第一步;
  • 循环结束以后,可能出现nums1还有数据没有用完,但是nums1本身就在最终的数组中,所以不需要再复制进数组了;也可能是nums2还没有用完,只需要把nums2剩余数据存进nums1就可以了。

代码和结果:

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int p=m+n-1;
        n--;
        m--;
        while(n>=0&&m>=0)
        {
            if(nums1[m]>nums2[n])
            {
                nums1[p]=nums1[m];
                m--;
                p--;
            }
            else
            {
                nums1[p]=nums2[n];
                n--;
                p--;
            }
        }
        while(n>=0)
        {
            nums1[p]=nums2[n];
            p--;
            n--;
        }
    }
};
运行结果:

原题链接:https://leetcode-cn.com/problems/merge-sorted-array/

相关文章

网友评论

      本文标题:合并两个有序数组

      本文链接:https://www.haomeiwen.com/subject/dgdyqktx.html