leetcode88--合并两个有序数组

1. 题意

将两个非逆序合并到其中一个中来。

合并两个有序数组

2. 题解

2.1 合并排序

先将另个数组的值放在前面数组的末尾,再对数组进行排序。

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {


        copy(nums2.begin(), nums2.end(), nums1.begin() + m);
        sort(nums1.begin(), nums1.end(), less<int>());


    }
};
// Time: O(ologn) Space: O(m+n)
2.2 双指针加辅助数组
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        vector<int> aux(m + n, 0);

        int p  = 0;
        int p1 = 0;
        int p2 = 0;


        while (p1 < m || p2 < n) {  
            if ( p1 < m && p2 < n) {
                aux[p++] = nums1[p1] <= nums2[p2] ?
                    nums1[p1++] : nums2[p2++];
            }
            else {
                aux[p++] = p1 < m ? nums1[p1++] : nums2[p2++];
            }
        }

        copy(aux.begin(), aux.end(), nums1.begin());
        for(auto c:aux)
            std::cout << c << " ";

    }
};
2.3 双指针加逆序优化空间
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {


        copy(nums2.begin(), nums2.end(), nums1.begin() + m);
        sort(nums1.begin(), nums1.end(), less<int>());


    }
};
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值