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

题目

思路

因为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--];
        }
    }
};
相关推荐
在成都搬砖的鸭鸭13 分钟前
【LeetCode】时间复杂度和空间复杂度
算法·leetcode·golang·排序算法
Mercury_Lc14 分钟前
【力扣 - 简单题】88. 合并两个有序数组
数据结构·算法·leetcode·acm
qy发大财16 分钟前
全排列(力扣46)
算法·leetcode·职场和发展
欧了11116 分钟前
动态规划LeetCode-1049.最后一块石头的重量Ⅱ
c语言·算法·leetcode·动态规划·01背包
冠位观测者18 分钟前
【Leetcode 每日一题】1760. 袋子里最少数目的球
数据结构·算法·leetcode
菠菠萝宝1 小时前
【代码随想录】第八章-贪心算法
算法·贪心算法·排序算法·合并区间·加油站·找零·监控二叉树
IT古董1 小时前
【机器学习】数学知识:拉格朗日对偶(Lagrange Duality)
算法·机器学习·支持向量机
Coovally AI模型快速验证2 小时前
Vision Transformer:打破CNN垄断,全局注意力机制重塑计算机视觉范式
深度学习·算法·目标检测·计算机视觉·cnn·开源·transformer
算法工程师y2 小时前
Matlab图像处理基础入门 - 亮度/对比度调整实战
图像处理·人工智能·算法·matlab
芥子沫2 小时前
Java常见排序算法及代码实现
java·算法·排序算法