LeetCode 面试经典150题 88.合并两个有序数组

题目:

给你两个按 非递减顺序 排列的整数数组 nums1和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意: 最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

思路:从右向左比较,将大的放到末尾,定义三个指针分别表示m个元素的末尾、n个元素的末尾、合并后数组的末尾

代码:

java 复制代码
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = m - 1, p2 = n - 1, p = m + n - 1;
        while(p2 >= 0) { // nums2 还有要合并的元素
            if (p1 >= 0 && nums1[p1] > nums2[p2]) { // 只有这一种情况将m的元素移动到右边
                nums1[p] = nums1[p1];
                p--;
                p1--;
            } else {
                nums1[p] = nums2[p2];
                p--;
                p2--;
            }
        }
    }
}

性能:时间复杂度O(m+n)

空间复杂度O(1)

相关推荐
微尘hjx3 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
Cosolar5 小时前
不收费、不加水印、数据归你:我做了个开源的在线简历工具
后端·面试·前端框架
行走的陀螺仪6 小时前
【转型攻略】2026 年,后端 / 全栈工程师转 AI Agent 方向:能力地图、按周学习路线与面试要点
人工智能·面试·职场和发展
小蒋观天下7 小时前
雷击与浪涌防护:前端SPD选型、接地网误区,接地不当反而引入干扰
深度学习·算法·机器学习
考研保研资料分享7 小时前
法学保研中国人民大学诉讼法:英语讨论、辩论与两校笔试
面试
WBluuue8 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
圣保罗的大教堂8 小时前
leetcode 3619. 总价值可以被 K 整除的岛屿数目 中等
leetcode
kyriewen8 小时前
我把 10 道面试题答案真跑了一遍:6 道是错的
前端·javascript·面试
澳鹏Appen9 小时前
澳鹏重磅发布ExamOCRBench:面向端到端试卷判分的多任务基准
算法·benchmark·基准评测