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)的内存