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--];
            }
        }
    }
}
相关推荐
To_OC4 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
Forever Nore6 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法
hansang_IR7 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
Tisfy8 小时前
LeetCode 3731.找出缺失的元素:哈希 / 排序
算法·leetcode·哈希算法·排序·哈希表
lucas_AI9 小时前
Q-CueGraph:你的多模态大模型会 zoom,但真的知道该看哪儿吗?
人工智能·算法
kaixin_啊啊9 小时前
test_机器学习算法学习
学习·算法·机器学习
liulilittle9 小时前
MOE路由:路由(logits: top-k/8)
c++·人工智能·算法·机器学习·llm
旖旎夜光9 小时前
LeetCode 11:盛最多水的容器(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
一只齐刘海的猫9 小时前
【Leetcode】乘积最大子数组
算法·leetcode·职场和发展