内容简介:默认每天都要刷两道题。今天目标已完成。26. 删除排序数组中的重复项
叨逼叨
默认每天都要刷两道题。
今天目标已完成。
第一题
26. 删除 排序 数组中的重复项
难度:简单
类型:数组
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
这题其实我之前做过,但是一直提交失败。
经过昨天的那题数组题,我换了一种for in方式。
之前我采用的是下标来定位,用 pop 来删除重复项。
这次采用了数组内的每一项来单独做对比,用 remove 来进行删除操作。
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
length = len(nums)
if length > 1: \\这个判定很重要
point = nums[0]
for i in nums[1:]:
if point != i:
point = i
else:
nums.remove(i)
print(len(nums))
其中的 if length > 1 是后面进行修改的,是必须的判定。
因为可能存在空数组的情况,那么length = 0,不需要删除任何项目。
而当只有一个数组的时候,length = 1,同样不需要删除任何项目。
看了下用时,800ms属于中间位置。
看了下44ms的范例,采用的是下标标记,用了反向的思路。
因为是有序数组,采用了快慢两种指针,当存在不一致的时候,可以进行覆盖,达到删除的目的。
第二题
80. 删除排序数组中的重复项 II
难度:中等
类型:数组
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。
和第一题十分相似,但是多了条件,就是数值可以出现两次,这就需要额外的进行计数。
class Solution:
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) < 1:
return 0
point = nums[0]
count = 0
for i in nums[1:]:
if point != i:
point = i
count = 0
else:
count = count + 1
if count == 2:
nums.remove(i)
count = 1
return len(nums)
我的思路都是比较粗暴的办法,就是用变量记录当前的对比值,当对比值出现超出2次时候,就进行remove,和第一题比较接近的思路,方法也大致相同。
这题的用时会更少一点,但是也是中间位置。
总结
这两天做的题目都比较相似,而且难度较低,都是数组的题目。
套路比较相似,对python3的删除操作和遍历也有了更深的认识与实践。
后续要开始做更多其他数据结构的题目,不断尝试。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员成长的烦恼
吴亮、周金桥、李春雷、周礼 / 华中科技大学出版社 / 2011-4 / 28.00元
还在犹豫该不该转行学编程?还在编程的道路上摸爬滚打?在追寻梦想的道路上你并不孤单,《程序员成长的烦恼》中的四位“草根”程序员也曾有过类似的困惑。看看油田焊接技术员出身的周金桥是如何成功转行当上程序员的,做过钳工、当过外贸跟单员的李春雷是如何自学编程的,打小在486计算机上学习编程的吴亮是如何一路坚持下来的,工作中屡屡受挫、频繁跳槽的周礼是如何找到出路的。 《程序员成长的烦恼》记录了他们一步一......一起来看看 《程序员成长的烦恼》 这本书的介绍吧!
随机密码生成器
多种字符组合密码
HSV CMYK 转换工具
HSV CMYK互换工具