天天看点

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;
    }
};