-
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多分钟。对于算法新手的我来说,一道题目完完整整的想出思路还是有些难,特别是在边界这部分,脑子很难转过弯,要重复想特别多遍。但结果我还是比满意吧,虽然是简单的题目,但通过自己努力写出来,还是挺有成就感的,一点点进步吧!
python之删除排序数组中的重复项
最新推荐文章于 2024-03-28 21:00:00 发布