【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--;
            }
        }
    }
};
相关推荐
Li emily6 小时前
外汇api接口实践:实时汇率与历史数据获取
人工智能·python·api·fastapi
XWalnut6 小时前
LeetCode刷题 day13
数据结构·算法·leetcode
甄心爱学习6 小时前
【项目实训】法律文书智能摘要系统3
前端·人工智能
bukeyiwanshui6 小时前
20260417 NFS服务器
linux·运维·服务器
TheRouter6 小时前
AI 不会消灭软件工程,它只会消灭低维的软件工程
人工智能·软件工程
冲浪中台6 小时前
从追逐技术到回归业务本质,吃互联网红利罢了
服务器·前端·人工智能·低代码
wzl202612136 小时前
企微关键词拉群之批量自动化与风控规避方案
运维·自动化·企业微信
3DVisionary6 小时前
升维洞察:DIC全场视觉检测如何重塑力学测试的“时空秩序”
人工智能·计算机视觉·视觉检测·动态测量·dic技术·xtdic·结构疲劳演化
做个文艺程序员6 小时前
Claude Skill 进阶:多文件结构、脚本集成与触发优化
人工智能·python·开源
AlbertS6 小时前
distcc + ccache 编译递归问题排查总结
c++·cmake·gcc·g++·distcc·ccache