天天看点

排序数组排除重复元素

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        n=len(nums)
        i=0
        for j in range(n-1):
            if nums[i]==nums[i+1]:
                nums.remove(nums[i+1])
            else:
                i=i+1
        return (i+2)
           

单指针+删除

由于排好序了,遍历时当两个相同就删除

思路很简单,但击败率太低

排序数组排除重复元素
class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        n=len(nums)
        if n<2:
            return n
        i,p=0,0      
        while i+1<n:
            if nums[i]!=nums[i+1] and nums[i+1]!=nums[p]:
                p=p+1
                nums[p]=nums[i+1]
            i=i+1
        return p+1
           

双指针+覆盖

一个指针负责遍历,另一个指针负责覆盖掉前几个数值。

思路不算难,但是还是击败人数太少

排序数组排除重复元素
class Solution {
public:
    int removeDuplicates(vector<int>& nums) 
    {
        int n=nums.size();
        if(n<2) return n;
        int i=0,p=0;
        while(i+1<n)
        {
            if(nums[i]!=nums[i+1]&&nums[i+1]!=nums[p])
                nums[++p]=nums[++i];
            else
                i++;
        }
        return (p+1);
    }
};
           

用同样的思路写了此C++,执行结果非常令人满意。

无论是执行用时还是击败人数都达到了满意程度。

排序数组排除重复元素
class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        n=len(nums)
        if n<2:
            return n
        x=sorted(list(set(nums)))
        n=len(x)
        for i in range(n):
            nums[i]=x[i]
        return n
           

集合

python虽然效率比不上C++,但是python由他自己的优势。

python代码量可以远远小于C++

python自身具有set集合形式,而集合具有互异性

可以自动排除重复元素

但是他其实动用了另外内存储存了数据

所以它并不是O(1)的内存

排序数组排除重复元素

继续阅读