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--];
            }
        }
    }
}
相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark2 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her12 天前
并查集-听课笔记
笔记·算法·并查集
码流子2 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven2 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark2 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法