【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--;
            }
        }
    }
};
相关推荐
小程故事多_806 分钟前
Claude Code与Codex六大组件拆解,Coding Agent怎么把任务做稳
人工智能
董员外12 分钟前
RAG 系统进化论(六):GraphRAG(基于知识图谱的 RAG),从相似文本走向实体关系
人工智能·后端·设计模式
杨某不才22 分钟前
如何能让Linux服务器对shell 终端 + sftp 文件传输长期保活
linux·运维·服务器
vance0426 分钟前
免费Cloudflare隧道隐藏公网IP
linux·tcp/ip·github
蓝斯49729 分钟前
Diff算法的简单介绍
算法
过期的秋刀鱼!33 分钟前
L2正则化,防止过拟合-历史补充
算法·过拟合·l2正则化
Summer-Bright40 分钟前
AI 软件简报 07.29-08.02:OpenAI 降价 80%、DeepSeek 全开源、欧盟动刀
人工智能·ai·开源·ai软件
武子康44 分钟前
模型发布可以按天看,生产默认模型不能按天切:一套可回退的 30 天验收流程
人工智能·llm·agent
Byron Loong1 小时前
【C++】重定向是什么
开发语言·c++
神经蛙19961 小时前
我用 TRAE Work 做周报:从 4 小时到 45 分钟的完整实操,建议收藏
人工智能