zoukankan      html  css  js  c++  java
  • 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驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    mysql命令集锦
    linux 删除文件名带括号的文件
    linux下的cron定时任务
    struts2文件下载的实现
    贴一贴自己写的文件监控代码python
    Service Unavailable on IIS6 Win2003 x64
    'style.cssText' is null or not an object
    "the current fsmo could not be contacted" when change rid role
    远程激活程序
    新浪图片病毒
  • 原文地址:https://www.cnblogs.com/itdef/p/14374242.html
Copyright © 2011-2022 走看看