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 += 1e.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 = 1slow = 1,fast = 2, 此時nums[fast] = 2,nums[slow] = 2➔slow = 2slow = 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!
評論