Leetcode 第26题:Remove Duplicates from Sorted Array(删除排序数组中的重复项)

题目地址:Remove Duplicates from Sorted Array


 

题目简介:

给定一个排序数组,需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,必须在原地修改输入数组并在使用O(1)额外空间的条件完成。

示例:

Example 1:

Given 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 returned length.

Example 2:

Given nums = [0,0,1,1,1,2,2,3,3,4],

Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.

It doesn't matter what values are set beyond the returned length.

题目解析:

1、暴力解决:记第i个数为x_{i},如果x_{i+1}=x_{i},那么便把x_{i+1}删除,继续与下一个对比。

C++版:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.size() < 2)
            return nums.size();
        int size = nums.size();
        int temp = nums[0];
        vector<int>::iterator it = nums.begin() + 1;
        while (it != nums.end())
        {
            if (temp != *it)
            {
                temp = *it;
                it++;
            }
            else
            {
                nums.erase(it);
            }
        }
        return nums.size();
    }
};

2、双指针法:两个指针是指一个跑得慢,用来记住当前出现的最大值,另一个跑得快,消灭和跑得慢的值相同的值。

C++版:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.size() < 2)
            return nums.size();
        int j = 0; //用来存储跑的慢的
        for (int i = 0; i < nums.size();)
        {
            if (nums[i] != nums[j])
            {
                j++;
                nums[j] = nums[i];
                i++;
            }
            else
                i++;
        }
        return j + 1;
    }
};

Python版本:

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if (len(nums) < 2):
            return len(nums)
        
        i = j = 0
        while (i < len(nums)):
            if nums[j] != nums[i]:
                j += 1
                nums[j] = nums[i]
                i += 1
            else:
                i += 1
        
        return j + 1

猜你喜欢

转载自blog.csdn.net/chao_shine/article/details/88649016