27. Remove Element
題目網址:https://leetcode.cn/problems/remove-element/
題意:給一整數 array
nums
和一整數val
,請 in-place 移除所有數值等於val
的元素, 並返回移除後nums
的新長度。不要使用額外的空間, 設計 $O(1)$ space 的演算法, 並原地修改
nums
。元素的順序可以改變, 不需要考慮
nums
中超出新長度後面的元素。
Solution:
想法:利用 Two Pointers, 先初始化
slow = fast = 0
, 用fast
來遍歷nums
, 而slow
用來指向新 array 下一個要填入的元素的 index。一旦nums[fast] != val
, 則nums[slow] = nums[fast]
, 然後slow += 1
e.g.
nums = [3, 2, 2, 3]
,val = 3
slow = 0
,fast = 0
, 此時nums[fast] = 3 = val
跳過slow = 0
,fast = 1
, 此時nums[fast] = 2
,nums[slow] = 2
➔slow = 1
slow = 1
,fast = 2
, 此時nums[fast] = 2
,nums[slow] = 2
➔slow = 2
slow = 2
,fast = 3
, 此時nums[fast] = 3 = val
跳過- 做完後
nums = [2, 2, 2, 3]
,slow = 2
➔slow
記錄著新 array 的元素個數, 故新 array 實際上 =[2, 2]
class Solution { |
- time:$O(n)$ ➔ 遍歷
nums
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論