小李飞刀:用python刷题ing....
叨逼叨
默认每天都要刷两道题。
今天目标已完成。
第一题
26. 删除排序数组中的重复项
难度:简单
类型:数组
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
这题其实我之前做过,但是一直提交失败。
经过昨天的那题数组题,我换了一种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
难度:中等
类型:数组
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
和第一题十分相似,但是多了条件,就是数值可以出现两次,这就需要额外的进行计数。
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的删除操作和遍历也有了更深的认识与实践。
后续要开始做更多其他数据结构的题目,不断尝试。
相关推荐
huavhuahua 2020-11-05
Tristahong 2020-10-14
Winterto0 2020-06-26
feishicheng 2020-06-09
laohyx 2020-05-07
举 2020-05-06
cenylon 2020-04-22
sschencn 2020-04-21
yawei 2020-02-26
chaigang 2020-02-25
小方哥哥 2020-01-12
千锋 2019-12-28
fgleeldq 2020-01-01
坚持是一种品质 2019-12-15
wklken的笔记 2019-12-03
LczPtr 2019-11-19
duanlove技术路途 2019-11-09
苏牧蕾的极客空间 2019-11-04