Leetcode 88. 合并两个有序数组 双指针

地址 https://leetcode-cn.com/problems/merge-sorted-array/

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

 

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
 

提示:

nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[i] <= 109

解答1 

由于数组是有序的 所以新开一个数组,使用两个指针指向两个数组的当前需要处理的点

根据数的大小 决定处理哪个数. 过程如下

代码

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        vector<int> ans;
        int l=0;int r=0;
        while(l<m && r < n){
            if(nums1[l] <= nums2[r]){
                ans.push_back(nums1[l]);l++;
            }else{
                ans.push_back(nums2[r]);r++;
            }
        }
        while(l<m){
            ans.push_back(nums1[l]);l++;
        }
        while(r<n){
            ans.push_back(nums2[r]);r++;
        }
        
        nums1 =ans;
        return;
    }
};

同样的 可以直接使用NUMS1 作为存储的数组 逆序比较即可

如图

作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
阿里打赏 微信打赏
原文地址:https://www.cnblogs.com/itdef/p/14374242.html