iT邦幫忙

2025 iThome 鐵人賽

DAY 0
0
自我挑戰組

LeetCode 每日一題挑戰系列 第 20

Day 20 - Remove Element

  • 分享至 

  • xImage
  •  

題目

給定一個整數陣列 nums 和一個整數 val,要求 就地移除陣列中所有等於 val 的元素,並返回剩餘元素的數量 k。
剩下的元素順序可以改變,超出 k 之後的元素不需要關心。

範例

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,,]
Explanation: 返回 k = 2,前兩個元素為 2。

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,,,_]
Explanation: 返回 k = 5,前五個元素為 0,1,4,0,3,順序可以改變。

解題思路

這題可以用 雙指標法:

用一個指標 k 表示新陣列的長度。

遍歷整個陣列,當 nums[i] != val 時,把它放到 nums[k] 並移動 k。

最後返回 k。

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

程式碼(Java)
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0;
int right = nums.length - 1;

    while (left <= right) {
        if (nums[left] == val) {
            nums[left] = nums[right];
            right--;
        } else {
            left++;
        }
    }
    return left;
}

}

心得

這題的技巧跟「Remove Duplicates」有點相似,但它更靈活,因為不需要保持原有順序,甚至可以直接用交換法優化。
對我來說,這題像是在過濾掉不想要的東西,把有用的集中到前面,剩下的部分就丟掉。
https://ithelp.ithome.com.tw/upload/images/20250926/20169537S9FhpPHnYm.pnghttps://ithelp.ithome.com.tw/upload/images/20250926/20169537vylTzUmlNx.pnghttps://ithelp.ithome.com.tw/upload/images/20250926/20169537h8dd77oEbW.png


上一篇
Day 19 - Remove Duplicates from Sorted Array
系列文
LeetCode 每日一題挑戰20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言