排序数组排除重复元素

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)的内存
在这里插入图片描述

发布了115 篇原创文章 · 获赞 0 · 访问量 2121

猜你喜欢

转载自blog.csdn.net/weixin_45569078/article/details/104401555