學習路線/雙指標

88. 合併兩個有序陣列

Easy

Merge Sorted Array

ArrayTwo Pointers

題目描述

給定兩個已排序的整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使合併後的陣列仍然有序。nums1 的後半段預留了足夠空間(以 0 填充)。

LeetCode 88原題連結 →

解法思路

  1. 使用三指針:p1 指向 nums1 有效元素末尾、p2 指向 nums2 末尾、p 指向 nums1 最末端
  2. 從後往前填充,比較 nums1[p1] 和 nums2[p2],將較大者放到 nums1[p]
  3. 避免從前往後合併時需要搬移元素的問題
  4. 當 p2 < 0 時結束(nums1 剩餘部分已在正確位置)

複雜度分析

  • 時間複雜度:O(m + n)
  • 空間複雜度:O(1)

nums1(含預留空間)

1
[0]
2
[1]
3
[2]
0
[3]
0
[4]
0
[5]
p1 = 2p = 5

nums2

2
[0]
5
[1]
6
[2]
p2 = 2
填入位置 (p)nums1 指針 (p1)nums2 指針 (p2)
初始狀態:nums1 有效長度 m=3,nums2 長度 n=3。三個指針:p1=2(nums1 末尾),p2=2(nums2 末尾),p=5(填入位置)。
1 / 10