当前位置:   article > 正文

26.从排序数组中删除重复项-Python-LeetCode_python数组去掉重复项

python数组去掉重复项

一、题目

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

例1:

给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。

例2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。

二、解法

我们先把列表排序,然后设置两个变量,startend ,一个用来计数,一个用来遍历列表,如果 nums[start]nums[end] 相等,那么 end 往后移一位,如果两者不相等,那么 nums[end] 赋值给 nums[start+1] , 然后两者往后移一位

代码如下:

#排除空列表跟只有一个元素的列表
l = len(nums)
if l < 2:
    return l
#先进行排序,然后设置两个变量
nums.sort()
start, end = 0, 1
#start用来记录个数,end用来遍历列表,与start进行比较
while end < l:
    #当两者相等的时候,end往后移一位
    if nums[start] == nums[end]:
        end += 1
    else:
        #当两者不相等的时候,nums[start]后一位的值设置为nums[end]
        nums[start+1] = nums[end]
        #两个变量都往后移一位
        start += 1
        end += 1
return start+1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

时间:92ms,击败了 73%

因为不管两者是否相等还是不相等,每次end始终要往后移动一位,所以我们可以把代码优化下

优化后的代码:

#优化后代码
l = len(nums)
if l < 2:
    return l
nums.sort()
start = 0
for x in range(1,l):
    if nums[start] != nums[x]:
        nums[start+1] = nums[x]
        start += 1
return start+1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

时间:76ms, 击败了 97%

结语

欢迎关注我的公众号 疯子的Python笔记

公众号二维码.jpg

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50533?site
推荐阅读
相关标签
  

闽ICP备14008679号