算法与数据结构(合并两个有序数组)

题目

思路

因为nums1数组的长度的长度等于m+n,所以我们可以采用逆向双指针的方法,分别从nums1的m-1的位置和nums2的n-1的位置向前遍历,选取它们两个之间较大的数分别向nums1的m+n-1的位置开始不断向前插入

解题过程

定义好cur1,cur2和k后,在确保nums1和nums2都没遍历完的情况下选择较大的元素放到k位置,以此循环。

最后若nums2中的元素没有遍历完,则挨个向k位置插入。

如果nums1中的元素没有遍历完,则无需操作,因为nums1中前面的元素是有序的。

代码

cpp 复制代码
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) 
    {
        int cur1 = m-1,cur2 = n-1;
        int k = m+n-1;
        while(cur1>=0 && cur2>=0)
        {
            //选择较大的放到k位置
            if(nums1[cur1] < nums2[cur2])
            nums1[k--] = nums2[cur2--];
            else
            nums1[k--] = nums1[cur1--];
        }

        while(cur2>=0)
        {
            nums1[k--] = nums2[cur2--];
        }
    }
};
相关推荐
ChoSeitaku11 小时前
NO.14数据结构红黑树|树高|转化4阶B树|插入操作|删除操作
数据结构·b树
T1an-112 小时前
力扣70.爬楼梯
算法·leetcode·职场和发展
T1an-112 小时前
力扣169.多数元素
数据结构·算法·leetcode
violet-lz13 小时前
数据结构:七大线性数据结构从结构体定义到函数实现的的区别
数据结构
_dindong17 小时前
动规:回文串问题
笔记·学习·算法·leetcode·动态规划·力扣
wangwangmoon_light17 小时前
0.0 编码基础模板
java·数据结构·算法
共享家952717 小时前
Leetcode刷题
算法·leetcode·职场和发展
simon_skywalker17 小时前
第7章 n步时序差分 n步时序差分预测
人工智能·算法·强化学习
山,离天三尺三18 小时前
基于LINUX平台使用C语言实现MQTT协议连接华为云平台(IOT)(网络编程)
linux·c语言·开发语言·网络·物联网·算法·华为云
flashlight_hi18 小时前
LeetCode 分类刷题:74. 搜索二维矩阵
python·算法·leetcode·矩阵