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