【leetcode】26. Remove Duplicates from Sorted Array 刪除有序陣列的重複元素

knzeus發表於2019-05-11

1. 題目

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this in place with constant memory.

For example,
Given input array nums = [1,1,2],

Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn`t matter what you leave beyond the new length.

2. 思路

遍歷,維護兩個下標,一個是待填充,一個是待處理。當待處理的與上一個相同時直接跳過,不同則移到待填充處。O(N),原地。

3. 程式碼

耗時:29ms

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.size() <= 1) { return nums.size(); }
        int i = 1; 
        int j = 1;
        int v = nums[0];
        int sz = nums.size();
        while (j < sz) {
            if (nums[j] != v) {
                if (j != i) {
                    nums[i] = nums[j];
                }
                v = nums[j];
                i++;
            }
            j++;
        }
        return i;
    }
};

相關文章