LeetCode:88. 合并两个有序数组

简介

题目链接:https://leetcode.cn/problems/merge-sorted-array/description/

解决方式:数组 + 双指针

这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!

推荐查看灵茶山艾府大佬所作题解。

双指针

解题思路:双指针。不过与以往不同的是,此处双指针是倒序遍历数组。因为根据题目可知,数组是非严格递增的,最后一个元素是该数组最大的元素。我们从后往前遍历,可以很好的利用到 nums1 数组后面空出来的空间,而且移动元素都是有效操作。如果我们从前往后遍历,会出现每次都需要移动后面元素的情况,很多无效的移动操作,不如从后往前遍历高效。

java 复制代码
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // p1 指向 nums1 最后有效元素,p2 指向 nums2 最后元素,p 指向 nums1 最后元素
        int p1 = m - 1;
        int p2 = n - 1;
        int p = m + n - 1;
        // 一直迭代,直到 nums2 中的所有元素合并到 nums1
        while(p2 >= 0){
            // 如果 p1 元素大于 p2,则 p1 元素移到 nums1 数组的最后,反之亦然
            if(p1 >= 0 && nums1[p1] > nums2[p2]){
                // 有可能出现 p1 的元素都比 p2 小,所以需要判断 p1 >= 0
                nums1[p--] = nums1[p1--];
            }else{
                nums1[p--] = nums2[p2--];
            }
        }
    }
}
相关推荐
数模竞赛Paid answer1 小时前
2025年MathorCup数学建模A题汽车风阻预测解题文档与程序
算法·数学建模·mathorcup
xin_nai1 小时前
LeetCode热题100(Java)(6)矩阵
java·leetcode·矩阵
一只幸运猫.6 小时前
2026Java 后端面试完整版|八股简答 + AI 大模型集成技术(最新趋势)
人工智能·面试·职场和发展
Old Uncle Tom7 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆7 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
生信碱移7 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
智者知已应修善业7 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
圣保罗的大教堂8 小时前
leetcode 1855. 下标对中的最大距离 中等
leetcode
智者知已应修善业9 小时前
【51单片机按键调节占空比3位数码管显示】2023-8-24
c++·经验分享·笔记·算法·51单片机
.54810 小时前
## Sorting(排序算法)
python·算法·排序算法