1.1 面试经典 150 题-合并两个有序数组

合并两个有序数组

方法一:先合并再排序

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.
        """

        # 先合并
        for i in range(m, m+n):
            nums1[i] = nums2[i - m]

        # 再排序
        nums1.sort()

方法二:从尾部按序插入表

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.
        """
        pos_1, pos_2 = m, n
        count = 0
        while pos_1 > 0 and pos_2 > 0:
            # 从nums1的末尾开始填入数字
            pos = m + n - count - 1
            if nums1[pos_1 - 1] <= nums2[pos_2 - 1]:
                # 最大值出现在nums2的指针处,将值填入,并将pos2指针向前偏移
                nums1[pos] = nums2[pos_2 - 1]
                pos_2 -= 1
            else:
                # 最大值出现在nums1的指针处,将值填入,并将pos2指针向前偏移
                nums1[pos] = nums1[pos_1 - 1]
                pos_1 -= 1
            # 已填入的个数+1
            count += 1
        if not pos_1:
            # nums2中还有数据没有填入
            nums1[:pos_2] = nums2[:pos_2]
相关推荐
kishu_iOS&AI36 分钟前
Python - 链表浅析
开发语言·python·链表
大连好光景1 小时前
conda管理包还是pip管理包
python·conda·pip
m0_730115111 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
FreakStudio1 小时前
MicroPython+PycoClaw,3 分钟搞定 ESP32 跑上 OpenClaw!
python·单片机·嵌入式·电子diy
罗罗攀1 小时前
PyTorch学习笔记|张量的广播和科学运算
人工智能·pytorch·笔记·python·学习
傻啦嘿哟2 小时前
Python 操作 Excel 条件格式指南
开发语言·python·excel
2301_807367192 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
2301_795741792 小时前
构建一个基于命令行的待办事项应用
jvm·数据库·python
小鸡吃米…2 小时前
Python 网络爬虫 —— 环境设置
开发语言·爬虫·python
sw1213892 小时前
Python字典与集合:高效数据管理的艺术
jvm·数据库·python