天天看點

LeetCode 26删除排序數組中的重複項

LeetCode 26删除排序數組中的重複項

  • 題目簡述:給定一個排序數組,你需要在原地删除重複出現的元素,使得每個元素隻出現一次,傳回移除後數組的新長度。不要使用額外的數組空間,你必須在 原地 修改輸入數組 并在使用 O(1) 額外空間的條件下完成。
  • 輸入:nums = [1, 1, 2] 輸出:2 (修改後的數組是[1,2])

    輸入:nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] 輸出:5 (修改後的數組是[0, 1, 2, 3, 4])

  • 思路:利用雙指針周遊數組,令指針

    k = 0,

    指針

    i=1

    開始周遊,如果遇到

    nums[i]

    nums[k]

    不相等,則說明找到新元素,将

    k++

    , 然後進行指派

    nums[k] = nums[i]

    ,指針

    k

    随着指針

    i

    不斷向前移動,直到

    i

    指向末尾。最後

    k+1

    就是修改後的數組元素個數。僅周遊一遍時間複雜度

    O(n)

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if(!n) return n;

        int k = 0;
        for(int i = 1; i < n; i++)
        {
            if(nums[i] != nums[i-1])
            {
                k++;
                nums[k] = nums[i];
                //nums[++k] = nums[i];//上兩句等價寫法
            }
        }
        return k + 1;
    }
};