天天看點

【leetcode】26 删除排序數組中的重複項(數組,雙指針)

題目連結:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

題目描述

給定一個排序數組,你需要在原地删除重複出現的元素,使得每個元素隻出現一次,傳回移除後數組的新長度。

不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。

示例 1:

給定數組 nums = [1,1,2], 

函數應該傳回新的長度 2, 并且原數組 nums 的前兩個元素被修改為 1, 2。 

你不需要考慮數組中超出新長度後面的元素。
           

示例 2:

給定 nums = [0,0,1,1,1,2,2,3,3,4],

函數應該傳回新的長度 5, 并且原數組 nums 的前五個元素被修改為 0, 1, 2, 3, 4。

你不需要考慮數組中超出新長度後面的元素。
           

思路

原地算法,考慮使用雙指針。

  • 慢指針

    i

    指向目前的最後一位有效數字,

    i+1

    為下一個寫入位置,快指針

    j

    周遊數組;
  • nums[j]!=nums[j]

    時,将

    nums[j]寫入nums[i+1]

    位置。

代碼

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.size()<=1) return nums.size();
        int i = 0; // 慢指針
        for(int j = 1; j < nums.size() ; j ++){ // 快指針
            if(nums[j] != nums[i]) {
                i++;
                nums[i] = nums[j]; // 複制值
            }
        }
        return i+1;
    }
};
           
【leetcode】26 删除排序數組中的重複項(數組,雙指針)