[LeetCode]26. Remove Duplicates from Sorted Array

  "从一个有序数组中删除重复数据"

Posted by Stephen.Ri on October 14, 2017

Description

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.

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.

Discussion

给有序数组去重。我们需要维护两个指针inewLeni用来遍历数组numsnewLen用来记录无重复项的新数组的长度。每次判断第i项与第i-1项是否相等,相等则跳过,否则newLen++

算法的时间复杂度为O(n)

C++ Code

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size() == 0)
        {
            return 0;
        }
        int newLen = 1;
        for(int i = 1; i < nums.size(); i++)
        {
            if(nums[i] != nums[i - 1])
            {
                nums[newLen] = nums[i];       //nums的前newLen个元素是新数组
                newLen ++;
            }
        }
        return newLen;
    }
};