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

题目

思路

因为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--];
        }
    }
};
相关推荐
Book思议-2 分钟前
【数据结构考研真题】链表题
c语言·数据结构·算法·链表·408·计算机考研
lifallen2 分钟前
从零推导一个现代 ReAct Agent框架
人工智能·算法·语言模型
⁤⁢初遇2 分钟前
数据结构---排序
数据结构·算法·排序算法
2401_846341656 分钟前
C++动态链接库开发
开发语言·c++·算法
ZPC821015 分钟前
【无标题】
人工智能·pytorch·算法·机器人
2301_7644413317 分钟前
使用python构建的STAR实验ΛΛ̄自旋关联完整仿真
开发语言·python·算法
Rainy Blue88320 分钟前
前缀和与差分(蓝桥杯高频考点)
数据结构·算法·蓝桥杯
Dfreedom.20 分钟前
机器学习经典算法全景解析与演进脉络(无监督学习篇)
人工智能·学习·算法·机器学习·无监督学习
421!26 分钟前
ESP32学习笔记之GPIO
开发语言·笔记·单片机·嵌入式硬件·学习·算法·fpga开发
夏日听雨眠31 分钟前
数据结构(单循环链表)
数据结构·链表