【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时,由于nums1与nums2本就是非递减数列,因此算法结束可以直接返回

代码实现:

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--;
            }
        }
    }
};
相关推荐
紧跟先前的步伐19 分钟前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
HideF29 分钟前
Linux
linux·服务器·网络
C^h31 分钟前
c++ string
开发语言·c++
万联WANFLOW32 分钟前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
释厄6231 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
raindayinrain1 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的1 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao1 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
老金带你玩AI2 小时前
集万家所长,一键复制的Agent.md!
人工智能
ZhuoAIStage2 小时前
舞台工艺多专业审图提速:用 AI 智能体编排 A+B+C+G 四段读图流水线
人工智能·自动化·工作流编排·舞台工艺·审图智能体