LeetCode热题100-88. 合并两个有序数组

这个题不在hot-100

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

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

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

首先想到的就是合并后排序就OK,时间复杂度为O(m+n)log(m+n).

python 复制代码
class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        l = m
        for i in range(len(nums2)):
            nums1[l] = nums2[i]
            l += 1
        nums1.sort()
        

第二种依赖数组有序,可以使用三针指的方法。时间复杂度O(m + n)

python 复制代码
class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        i = m - 1
        j = n - 1
        k = m + n -1

        while i >= 0 and j >= 0:
            if nums1[i] > nums2[j]:
                nums1[k] = nums1[i]
                i -= 1
            else:
                nums1[k] = nums2[j]
                j -= 1
            k -= 1
        while j >= 0:
            nums1[k] = nums2[j]
            j -= 1
            k -= 1
相关推荐
Hui_AI7202 小时前
保险条款NLP解析与知识图谱搭建:让AI准确理解保险产品的技术方案
开发语言·人工智能·python·算法·自然语言处理·开源·开源软件
人道领域2 小时前
【LeetCode刷题日记】119.最长连续序列(字节面试题最新)
java·算法·leetcode·面试·职场和发展
spssau2 小时前
非量表问卷信效度分析,用内容效度 + 重测信度评估数据质量
人工智能·算法·机器学习
我不是懒洋洋2 小时前
【数据结构】二叉树-堆(树的概念、二叉树的概念、顺序结构的结构及实现、堆的实现、堆排序、TopK问题)
c语言·数据结构·c++·经验分享·算法·青少年编程
KobeSacre2 小时前
将有序数组转换为二叉搜索树
数据结构·算法·leetcode
脱氧核糖核酸__2 小时前
LeetCode热题100——160.相交链表(两种解法)
算法·leetcode·链表
碧海银沙音频科技研究院2 小时前
博通BK7258原生语音识别与dump功能功能实现
人工智能·深度学习·算法
6Hzlia13 小时前
【Hot 100 刷题计划】 LeetCode 739. 每日温度 | C++ 逆序单调栈
c++·算法·leetcode