天天看點

排序數組排除重複元素

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)的記憶體

排序數組排除重複元素

繼續閱讀