Python实现删除排序数组中重复项的两种方法示例
本文实例讲述了Python实现删除排序数组中重复项的两种方法。分享给大家供大家参考,具体如下:
对于给定的有序数组nums,移除数组中存在的重复数字,确保每个数字只出现一次并返回新数组的长度
注意:不能为新数组申请额外的空间,只允许申请O(1)的额外空间修改输入数组
Example1:
Givennums=[1,1,2],
Yourfunctionshouldreturnlength=2,withthefirsttwoelementsofnumsbeing1and2respectively.
Itdoesn'tmatterwhatyouleavebeyond
Example2:
Givennums=[0,0,1,1,1,2,2,3,3,4],Yourfunctionshouldreturnlength=5,withthefirstfiveelementsofnumsbeingmodifiedto0,1,2,3,and4respectively.
Itdoesn'tmatterwhatvaluesaresetbeyondthereturnedlength.
说明:为什么返回列表长度而不用返回列表?因为列表传入函数是以引用的方式传递的,函数中对列表进行的修改会被保留。
//numsispassedinbyreference.(i.e.,withoutmakingacopy) intlen=removeDuplicates(nums); //anymodificationtonumsinyourfunctionwouldbeknownbythecaller. //usingthelengthreturnedbyyourfunction,itprintsthefirstlenelements. for(inti=0;i1.简单判断列表中元素是否相等,相等就删除多余元素
defremoveDuplicates(self,nums): """ :typenums:List[int] :rtype:int """ ifnotnums: return0 iflen(nums)==1:#单独判断列表长度为1的情况,因为之后的for循环从下标1开始 return1 temp_num=nums[0] count=0#for循环中动态删除列表元素,列表缩短,为了防止下标溢出需要用count标记删除元素个数 forindex,numinenumerate(nums[1:]): iftemp_num==num:#元素相等就删除 delnums[index-count] count+=1 else: temp_num=num returnlen(nums) defremoveDuplicates(self,nums): """ :typenums:List[int] :rtype:int """ forth=0 back=1 whileback<=len(nums)-1: ifnums[forth]==nums[back]: nums.pop(back) else: forth+=1 back+=1 returnlen(nums)2.修改数组,保证数组的前几个数字互不相同,且这几个数字的长度同返回长度相等
defremoveDuplicates(self,nums): """ :typenums:List[int] :rtype:int """ ifnotnums: return0 length=0#不存在重复数字的数组长度 forindexinrange(1,len(nums)):#遍历数组 ifnums[index]!=nums[length]: length+=1 nums[length]=nums[index] returnlength+1算法题来自:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/
PS:本站还有两款比较简单实用的在线文本去重复工具,推荐给大家使用:
在线去除重复项工具:
http://tools.jb51.net/code/quchong在线文本去重复工具:
http://tools.jb51.net/aideddesign/txt_quchong更多关于Python相关内容可查看本站专题:《Python字典操作技巧汇总》、《Python字符串操作技巧汇总》、《Python常用遍历技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。