88合并两个有序数组

从第四题过来的,这题主要是个两路合并排序,这里主要有个限制是个要在nums1数组直接改,而不是建个新数组,不然可以少考虑很多东西
我这里用的是双指针法,参考题解用了一个逆向指针很有意思,从后往前放最大的,这样可以直接把0扔掉。

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
//这里我用的双指针法
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int index1 = 0;
        int index2 = 0;
        for (int i = m; i < m + n; i++)
        {
            nums1[i] = pow(10,9);//反正这些0都是要扔掉的,不如换成大数方便比较大小
        }
        while (index2 < n)
        {
            if (nums1[index1] <= nums2[index2])
            {
                index1++;
            }//如果nums1数组里较小,往下延伸就行
            else
            {
                nums1.insert(nums1.begin() + index1, nums2[index2]);
                index2++;
                index1++;
                nums1.pop_back();//去掉后面的多余的0
            }
        }
    }
};
//题解里一个很有意思的方法,逆向指针,从后面开始找大的,这样直接在nums1上修改
class Solution1{
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int p1 = m - 1, p2 = n - 1;
        int tail = m + n - 1;
        int cur;
        while (p1 >= 0 || p2 >= 0) {
            if (p1 == -1) {
                cur = nums2[p2--];
            }
            else if (p2 == -1) {
                cur = nums1[p1--];
            }
            else if (nums1[p1] > nums2[p2]) {
                cur = nums1[p1--];
            }
            else {
                cur = nums2[p2--];
            }
            nums1[tail--] = cur;
        }
    }
};
int main()
{
    vector<int>nums1 = {1};
    vector<int>nums2 = { };
    Solution test;
    test.merge(nums1, 1, nums2, 0);
    for (int i = 0; i < nums1.size(); i++)
    {
        cout << nums1[i];
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值