LeetCode|Day13|88. 合并两个有序数组|Python刷题笔记
🗓️ 本文属于【LeetCode 简单题百日计划】系列
👉 点击查看系列总目录 >>
📌 题目简介
题号:88. 合并两个有序数组
难度:简单
题目链接:点击跳转
🧾 题目描述(简要)
给你两个按非递减顺序排列的整数数组 nums1
和 nums2
,以及两个整数 m
和 n
,分别表示 nums1
和 nums2
中的元素数目。
请你原地合并 nums2
到 nums1
中,使得合并后的数组同样按非递减顺序排列。
注意:nums1
的长度为 m + n
,其中后 n
个元素为 0,是预留空间。
示例:
输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
💡 解法:双指针从后向前合并
class Solution:def merge(self, nums1, m, nums2, n):i, j, k = m - 1, n - 1, m + n - 1while i >= 0 and j >= 0:if nums1[i] > nums2[j]:nums1[k] = nums1[i]i -= 1else:nums1[k] = nums2[j]j -= 1k -= 1nums1[:j+1] = nums2[:j+1]
🧠 我的理解
- 从数组尾部开始插入可以避免覆盖未处理的元素;
- 指针
i
指向nums1
的有效尾部,j
指向nums2
尾部; - 每次选出较大的数放到
k
指针位置; - 若
nums2
还有剩余,直接填充到前面。
📌 基础语法复习:
nums1[:j+1] = nums2[:j+1]
:切片赋值;while i >= 0 and j >= 0
:双指针条件;- 原地修改数组技巧。