【LeetCode】88.合并两个有序数组

题目链接:
https://leetcode.cn/problems/merge-sorted-array/description/?envType=study-plan-v2&envId=top-interview-150

题目描述:

方法一:

将nums2数组中的元素移动到数组nums1后面,然后使用C++内置算法sort进行排序

代码实现:

cpp 复制代码
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        for(int i=m; i<m+n; i++){
            nums1[i] = nums2[i-m];
        }
        sort(nums1.begin(), nums1.end());
    }
};

方法二:

使用逆向双指针算法

解题思路:

边界条件:

  • p1=-1时,需要将nums2剩余的元素移动到nums1
  • p2=-1时,由于nums1nums2本就是非递减数列,因此算法结束可以直接返回

代码实现:

cpp 复制代码
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int p1 = m-1;
        int p2 = n-1;
        int cur = m+n-1;

        while(p1>=0 || p2>=0){
            if(p1==-1){
                nums1[cur] = nums2[p2];
                p2--;
                cur--;
            }else if(p2==-1){
                break;
            }else if(nums2[p2] >= nums1[p1]){
                nums1[cur] = nums2[p2];
                p2--;
                cur--;
            }else{
                nums1[cur] = nums1[p1];
                p1--;
                cur--;
            }
        }
    }
};
相关推荐
kaikaile199515 小时前
能量算子的MATLAB实现与详细算法
人工智能·算法·matlab
tankeven15 小时前
HJ175 小红的整数配对
c++·算法
小布的学习手记15 小时前
教AI读小说:把《时光机器》变成一串数字的奇妙旅程
人工智能
大卡片15 小时前
Linux进程基础
linux·运维·服务器
.柒宇.15 小时前
docker容器技术实战
运维·docker·容器
优化Henry15 小时前
LTE-TDD小区光路闪断故障处理典型案例
运维·网络·5g·信息与通信
就是有点傻15 小时前
机器视觉图像处理学习第一天
人工智能·计算机视觉
Aaron158815 小时前
数字波束合成DBF与模拟波束合成ABF对比浅析
大数据·人工智能·算法·硬件架构·硬件工程·信息与通信·信号处理
MRDONG115 小时前
Prompt 到 Context 再到 Harness:AI 工程范式的三次跃迁
人工智能·语言模型·prompt
成都易yisdong15 小时前
实现三北方向转换计算器(集成 WMM2025 地磁模型)
开发语言·windows·算法·c#·visual studio