iT邦幫忙

2025 iThome 鐵人賽

DAY 0
0
自我挑戰組

LeetCode 每日一題挑戰系列 第 19

Day 19 - Remove Duplicates from Sorted Array

  • 分享至 

  • xImage
  •  

題目

給定一個已經排序的整數陣列 nums,要求 就地 移除重複的元素,使得每個元素只出現一次,並返回新的長度 k。
必須保留相對順序,並且不能使用額外的陣列空間(必須在 O(1) 空間內完成)。

範例

Input: nums = [1,1,2]
Output: 2, nums = [1,2,_]
Explanation: 返回 k = 2,且前兩個元素為 1, 2,剩下的元素不需要關心。

Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4,,,,,_]
Explanation: 返回 k = 5,前五個元素為 0,1,2,3,4。

解題思路

這題適合用 雙指標法 解決:

第一個指標 i 負責遍歷陣列。

第二個指標 k 負責標記唯一元素的位置。

當 nums[i] != nums[i-1] 時,把該元素放到 nums[k],並移動 k。

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

程式碼(Java)
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;

    int k = 1; // 第一個元素一定保留
    for (int i = 1; i < nums.length; i++) {
        if (nums[i] != nums[i - 1]) {
            nums[k] = nums[i];
            k++;
        }
    }
    return k;
}

}

心得

這題看起來簡單,但其實是練習 雙指標技巧 的好題目。
雙指標可以讓我們在 O(n) 時間內就地處理陣列,避免額外空間浪費。
類似的技巧可以用在「刪除特定元素」、「合併排序陣列」等問題上,非常值得熟練掌握。https://ithelp.ithome.com.tw/upload/images/20250926/20169537S3XIVJClZW.pnghttps://ithelp.ithome.com.tw/upload/images/20250926/20169537T4J1epnqad.pnghttps://ithelp.ithome.com.tw/upload/images/20250926/20169537gd18bqyf8x.png


上一篇
Day 18 - Merge k Sorted Lists
下一篇
Day 20 - Remove Element
系列文
LeetCode 每日一題挑戰20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言