python 数组去重复 python去除数组中的重复元素
转载
- LeetCode原题,题目是:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
- 两种解决方法:
① 逐一检查数组中的元素,与前一个元素比较相等则其后所有数组往前挪一位,时间复杂度为O(n2)
② 使用两个指针,一个指向第一次出现的新元素,第二个指向第一个指针的后一位元素,然后逐个比较是否相等,相等则继续后移直到不相等则将此元素移入第一个指针的后一位,接着两个指针都向后走一步O(n)比较上述两种方法,第二种方法较优,最终选择第二种方法解 - 实现代码:
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
length=len(nums)
if length<2:
return length
left,right=0,1
# 跳出while只有两种可能
# 1、right==length-1
# 2、nums[left]!=nums[right]
# 3、或者right==length-1 and nums[left]!=nums[right]
while True:
while nums[left]==nums[right] and right<(length-1):
right+=1
if right==length-1:
if nums[left]!=nums[right]:
nums[left+1]=nums[right]
return left+2
else:
return left+1
else:
nums[left+1]=nums[right]
left+=1
right+=1
- 结果:
- 总结:
虽说这是一道比较简单的题目,但从看题到代码提交完成,还是花了快40多分钟。对于算法新手的我来说,一道题目完完整整的想出思路还是有些难,特别是在边界这部分,脑子很难转过弯,要重复想特别多遍。但结果我还是比满意吧,虽然是简单的题目,但通过自己努力写出来,还是挺有成就感的,一点点进步吧!
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。