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)

相关推荐
垆边人似月.7 小时前
华为机试题 :两数之和
c++·算法·华为
默默开发7 小时前
物流行业可用算法方向
算法
垆边人似月.7 小时前
华为机试题 :有效的括号
c++·算法·华为
沐言人生8 小时前
又一个神级考公脑库-22,375篇真题终于按考点整理了
后端·面试
A加ITIL教练长河achotsao8 小时前
ITIL Master 战略领导者课后系列分享:AI编程正在重新划分研发与运维的边界
算法
hahaha60168 小时前
FPGA+ARM实现AWB的全流程
人工智能·嵌入式硬件·算法·计算机视觉·fpga开发
李洱8 小时前
LangChain 和 LangGraph 的区别:核心原理与使用场景
算法
for_ever_love__8 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
夏幻灵8 小时前
每日一题:LeetCode 206:反转链表——三指针与原地反转详解
算法·leetcode·链表
救救孩子把9 小时前
Agent面试题-记忆治理-上下文-多Agent协作与工程落地
面试·agent·多agent·agent记忆·agent面试题·上下文治理