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

题目

思路

因为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--];
        }
    }
};
相关推荐
安全系统学习31 分钟前
网络安全逆向分析之rust逆向技巧
前端·算法·安全·web安全·网络安全·中间件
sz66cm1 小时前
LeetCode刷题 -- 542. 01矩阵 基于 DFS 更新优化的多源最短路径实现
leetcode·矩阵·深度优先
菜鸟懒懒2 小时前
exp1_code
算法
Winn~2 小时前
JVM垃圾回收器-ZGC
java·jvm·算法
爱coding的橙子3 小时前
每日算法刷题Day24 6.6:leetcode二分答案2道题,用时1h(下次计时20min没写出来直接看题解,节省时间)
java·算法·leetcode
慢慢慢时光3 小时前
leetcode sql50题
算法·leetcode·职场和发展
pay顿3 小时前
力扣LeetBook数组和字符串--二维数组
算法·leetcode
精神小伙mqpm3 小时前
leetcode78. 子集
算法·深度优先
岁忧3 小时前
(nice!!!)(LeetCode每日一题)2434. 使用机器人打印字典序最小的字符串(贪心+栈)
java·c++·算法·leetcode·职场和发展·go
Tisfy3 小时前
LeetCode 2434.使用机器人打印字典序最小的字符串:贪心(栈)——清晰题解
leetcode·机器人·字符串·题解·贪心·