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

题目

思路

因为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--];
        }
    }
};
相关推荐
竹子_2325 分钟前
贪心算法解析
python·算法·贪心算法
郝学胜-神的一滴31 分钟前
OpenGL状态机与对象管理:优化图形渲染的高效方法
开发语言·c++·程序人生·算法·图形渲染
MSXmiao1 小时前
2048小游戏
数据结构·c++·算法
钮钴禄·爱因斯晨1 小时前
数据结构 | 树的秘密
c语言·开发语言·数据结构
CoovallyAIHub2 小时前
论文精读|YOLO系列最新模型水下实测:v8为何能斩获80.9% mAP?
深度学习·算法·计算机视觉
Ghost-Face2 小时前
《算法导论》笔记--归并排序 & 算法原理
算法
好好研究2 小时前
Java基础学习(一):类名规范、返回值、注释、数据类型
java·学习·算法
C++、Java和Python的菜鸟2 小时前
第二章 矩阵
人工智能·算法·矩阵
阑梦清川2 小时前
搜索算法---填涂颜色问题(在外围添加多余的0的求解方法)
算法
qiuyunoqy3 小时前
蓝桥杯算法之搜索章 - 2
算法·蓝桥杯·深度优先