27. Remove Element
1.題目說明:給定一個整數陣列 nums 和一個整數 val,請你原地移除所有等於val的元素,返回移除後的長度。
陣列元素的相對順序可以改變,但不能使用額外空間。
2.解題思路(雙指標法)
用兩個指標:
- i:慢指標,代表「下個應該放非 val 元素的位置」
- j:快指標,用來遍歷整個陣列
當 nums[j] != val 時,就把這個元素放到前面 nums[i],然後 i++。
當 nums[j] == val,就跳過它。
最後回傳 i,就是移除後的新長度。
3.範例:
輸入:nums = [3,2,2,3], val = 3
執行過程:
j=0 → nums[j]==3 → skip
j=1 → nums[j]==2 → nums[i]=2 → i=1
j=2 → nums[j]==2 → nums[i]=2 → i=2
j=3 → nums[j]==3 → skip
最後:
nums = [2,2,,]
return 2
輸出:2
(前兩個元素 [2,2] 為移除後結果)
4.比較LeetCode 26 & 27 的差異與核心思維!
5.程式碼截圖:
6.學習心得:這次的題目與前一題相似,只是這次不是刪重複值,而是移除特定數字,所以我利用前一題的解題絲路去推斷這一題該如何解,沒想到自己也很順利解出來,讓我有慢慢地覺得其實也不是每一題Leetcode都很難。