leetcode 88

文章介绍了两种方法来合并两个已排序的整数数组。第一种方法是使用额外的数组nums3存储结果,然后将结果赋值回nums1。第二种方法利用了两个数组的有序性,从数组末尾开始比较,避免了使用额外数组。这种方法中,pos指针在最坏情况下最多减少n,确保不会影响未比较的nums1元素。
摘要由CSDN通过智能技术生成

法一:使用额外数组存储再返回去赋值。

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int nums1_point = 0, nums2_point = 0, nums3_point = 0;
        vector<int> nums3(m + n, 0);
        if (m == 0) {
            nums1.assign(nums2.begin(), nums2.end());
        }
        else if (m != 0 && n != 0) {
            while (nums1_point < m && nums2_point < n) { //这里的m不能用num1.size()替代,会数组越界
                if (nums1[nums1_point] <= nums2[nums2_point]) {
                    nums3[nums3_point++] = nums1[nums1_point++];
                }
                else {
                    nums3[nums3_point++] = nums2[nums2_point++];
                }
            }
            while (nums1_point < m) {
                nums3[nums3_point++] = nums1[nums1_point++];
            }
            while (nums2_point < n) {
                nums3[nums3_point++] = nums2[nums2_point++];
            }
            nums1.assign(nums3.begin(), nums3.end());
        }
    }
};

法二:利用两个数组都有序,且数组一有m+n个位置。所以从两个数组的末尾开始比较,m,n正好作为两个尾指针,再增加一个最终指针pos = m + n - 1。num1和num2每次比较最后一个元素,更大的那个则被保存到pos位置,同时pos--,且m或n--。

为什么不会出现pos占据num1中m中未比较的点情况?

考虑最坏情况,即m一直未动,而一直n--,则pos也最多减去n,因为num1有m+n个位置,所以最坏也追不上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值