资讯专栏INFORMATION COLUMN

小李飞刀:用python刷题ing....

fasss / 3060人阅读

摘要:叨逼叨默认每天都要刷两道题。今天目标已完成。经过昨天的那题数组题,我换了一种方式。之前我采用的是下标来定位,用来删除重复项。这次采用了数组内的每一项来多带带做对比,用来进行删除操作。这个判定很重要其中的是后面进行修改的,是必须的判定。

叨逼叨

默认每天都要刷两道题。
今天目标已完成。

第一题

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的删除操作和遍历也有了更深的认识与实践。
后续要开始做更多其他数据结构的题目,不断尝试。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43104.html

相关文章

  • 小李飞刀刷题第三弹!

    摘要:刷题第三天正式刷题第三天。注意空字符串可被认为是有效字符串。错误的一次是因为没有考虑空字符串,当存在为的时候,结果应该为。第二题加一难度简单类型给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 刷题第三天 正式刷题第三天。之前看了个说法,挺认可的。就是不要太在意一天的能呈现的价值,但是要在意累计的价值。之前很多时候我会对今天一天没有完成的计划而沮丧,事实上,算法的实践...

    SillyMonkey 评论0 收藏0
  • 小李飞刀刷题第五弹!

    摘要:写在前面的话好几天木有刷题啦,今天猛刷了一把,要梳理一个顺序好好的学习啦一定要好好执行每天做题的计划最近真的好忙碌啊,还要做视频。第二题最大子序和难度简单给定一个整数数组,找到一个具有最大和的连续子数组子数组最少包含一个元素,返回其最大和。 写在前面的话 好几天木有刷题啦,今天猛刷了一把,要梳理一个顺序好好的学习啦~一定要好好执行每天做题的计划!最近真的好忙碌啊,还要做视频。不过呢,看...

    Miracle 评论0 收藏0
  • 小李飞刀:做题第六弹!

    摘要:给定的字符串只含有小写英文字母,并且长度不超过。其他这题了,要重做看了其他的人的题解,使用的是无限逼近中位值的办法,理论基础应该是泰勒公式。万万没想到居然用到了泰勒公式手工执行了下算法,反而理解的更快,但是泰勒公式还得再复习下。 写在前面的话 今天持续做题ing,python有意思~今天的题有点虐心...兴许是我太笨了...会努力学习的!动态规划我来啦~ 开始做题 第一题 459. 重...

    BigNerdCoding 评论0 收藏0
  • 小李飞刀刷题第十三弹!

    摘要:写在前面今天的小李的目标是排序算法,果然还是要下手写才会更有体会,也更记得住。排序算法冒泡排序主要是比对相邻两个数之间的大小关系,不断将较大值交换至最后。 写在前面 今天的小李的目标是排序算法,果然还是要下手写才会更有体会,也更记得住。 认真做题的分割线 第一题 215. 数组中的第K个最大元素难度:中等在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的...

    lixiang 评论0 收藏0
  • 小李飞刀刷题第四弹!

    摘要:第二题罗马数字转整数难度简单罗马数字包含以下七种字符,,,,,和。字符数值例如,罗马数字写做,即为两个并列的。通常情况下,罗马数字中小的数字在大的数字的右边。给定一个罗马数字,将其转换成整数。 随便说点啥 TIME:2019-02-01昨晚其实刷了题来着,但是没有解出来,哭泣!但是,今天重新写了下,解出来咯~所以今天的题量要增加咯~我会加油的! 第一题 14. 最长公共前缀难度:简单 ...

    luffyZh 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<