LeetCode|Day13|88. 合并两个有序数组|Python刷题笔记

LeetCode|Day13|88. 合并两个有序数组|Python刷题笔记

🗓️ 本文属于【LeetCode 简单题百日计划】系列

👉 点击查看系列总目录 >>


📌 题目简介

题号:88. 合并两个有序数组
难度:简单
题目链接:点击跳转


🧾 题目描述(简要)

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

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

注意:nums1 的长度为 m + n,其中后 n 个元素为 0,是预留空间。

示例:

复制代码
输入:nums1 = [1,2,3,0,0,0], m = 3
     nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]

💡 解法:双指针从后向前合并

python 复制代码
class Solution:
    def merge(self, nums1, m, nums2, n):
        i, j, k = m - 1, n - 1, 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
        nums1[:j+1] = nums2[:j+1]

🧠 我的理解

  • 从数组尾部开始插入可以避免覆盖未处理的元素;
  • 指针 i 指向 nums1 的有效尾部,j 指向 nums2 尾部;
  • 每次选出较大的数放到 k 指针位置;
  • nums2 还有剩余,直接填充到前面。

📌 基础语法复习:

  • nums1[:j+1] = nums2[:j+1]:切片赋值;
  • while i >= 0 and j >= 0:双指针条件;
  • 原地修改数组技巧。

📌 返回总目录:点我回目录