【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--;
            }
        }
    }
};
相关推荐
盟接之桥8 分钟前
盟接之桥谈线束数字化-按单入按单出:线束企业库存管理的破局之道
大数据·前端·网络·数据库·人工智能·制造
Summer-Bright10 分钟前
浏览器成了AI应用的新入口:智能体接管标签页之后,三本账谁买单
人工智能·chatgpt·agent·浏览器·智能体
高晶12 分钟前
ARM 嵌入式 Linux 文件系统从入门到实战:目录结构、权限管理、选型与挂载排查全攻略
linux·程序员
xiaohaiAIgeo21 分钟前
【2026年】紧急医疗运送送返:保额怎么看、多少够用
人工智能·科普知识
南棋网络安全26 分钟前
ssrf跨站请求伪造(保姆级教程)
运维·服务器·网络·网络安全
运维全世界28 分钟前
Slurm集群搭建实战踩坑:存储节点无RAID、跨节点GPU无法读取数据彻底解决
linux
倚楼听风语30 分钟前
Kotlin 协程与 suspend 原理详解
java·算法·kotlin
Xin77030 分钟前
LeetCode 200. 岛屿数量(DFS 深度优先遍历法)
leetcode
帷幕落秋31 分钟前
进程服务与文件描述符
linux·运维·面试
程序员清风32 分钟前
双指针与滑动窗口:高效处理连续区间
开发语言·算法