88. 合并两个有序数组

Problem: 88. 合并两个有序数组

思路

数据范围200,太小

  • 最暴力的想法:直接把nums2的有效部分覆盖掉nums1的无效部分,然后对nums1进行原地排序,时间复杂度:覆盖+排序: O ( n + n l o g n ) O(n + nlogn) O(n+nlogn) = O ( n l o g n ) O(nlogn) O(nlogn)
  • 优化:双指针,和归并排序一个想法,但这里由于是原地操作,所以需要先处理数值比较大的,也就是依次比较nums1和nums2两个数组元素谁大,然后放到nums1无效部分。

解题方法

双指针(这里是三个指针)
index1和index2分别指向nums1和nums2有效部分的最后
index指向nums1的最后
循环判断nums1和nums2的元素大小,较大的放到nums1的后面
更新指针
需要注意的是,同归并排序的合并过程,可能存在数组有剩余的情况,这里nums1的有效数组剩余无所谓,因为其本身就属于nums1。只需要考虑nums2,当nums2非空时,其中元素必定全部是最小的,所以直接放到nums1的最前面即可。

复杂度

时间复杂度: O ( n + m ) O(n + m) O(n+m) 遍历两个数组

空间复杂度: O ( 1 ) O(1) O(1) 指针变量

Code

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.
        """
        # 双指针
        index1, index2 = m - 1, n - 1 # 分别指向nums1和nums2有效数组的尾部
        index = n + m - 1 # 指向nums1的尾部

        # 比较两个数组的元素,谁大就放到index的位置
        while index1 >= 0 and index2 >= 0:
            if nums1[index1] <= nums2[index2]:
                nums1[index] = nums2[index2]
                index2 -= 1
            else:
                nums1[index] = nums1[index1]
                index1 -= 1
            index -= 1
        
        if index2 >= 0:
            # 如果num2有剩余 说明元素全是比nums1小的
            nums1[: index2 + 1] = nums2[: index2 + 1]

相关推荐

  1. LeetCode 88. 合并有序数组

    2024-04-10 16:22:03       58 阅读
  2. leetcode88--合并有序数组

    2024-04-10 16:22:03       44 阅读
  3. 88. 合并有序数组

    2024-04-10 16:22:03       38 阅读
  4. 【Leetcode|#88.合并有序数组

    2024-04-10 16:22:03       38 阅读
  5. 日常刷题之88-合并有序数组

    2024-04-10 16:22:03       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-10 16:22:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-10 16:22:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-10 16:22:03       82 阅读
  4. Python语言-面向对象

    2024-04-10 16:22:03       91 阅读

热门阅读

  1. npm常用命令详解

    2024-04-10 16:22:03       28 阅读
  2. ChatGPT助力学术写作:无缝撰写论文技巧

    2024-04-10 16:22:03       38 阅读
  3. Circuits--Sequential--Registers_2

    2024-04-10 16:22:03       34 阅读
  4. Linux中的防火墙————Firewalld

    2024-04-10 16:22:03       30 阅读
  5. NLopt

    2024-04-10 16:22:03       34 阅读
  6. 使用opencv + ffmpeg 开发视频播放器Demo

    2024-04-10 16:22:03       44 阅读
  7. k8s-pod设置执行优先级

    2024-04-10 16:22:03       39 阅读
  8. 在Pod设置limit 的情况下,如何让JDK容器适配

    2024-04-10 16:22:03       45 阅读
  9. “AI程序员上岗:垂类大模型应用蓬勃发展“

    2024-04-10 16:22:03       38 阅读
  10. hdc常用命令大全

    2024-04-10 16:22:03       37 阅读