0
点赞
收藏
分享

微信扫一扫

Leetcode刷题Day15

_LEON_ 2022-04-30 阅读 68

4.19

上次刷题仿佛是上辈子的事情了,最近忙ddl的各种,加上依然没有从emo里缓回来,现在虽然好像依然没有缓回来,但是还是在grief process里心情起起伏伏

今天看到很多年前学过的一句话,内心大受震动:“尽吾志也而不能至者,可以无悔矣”

4.20

昨天又是摆烂的一天

跟爸妈哭诉我感觉我这辈子可能要很晚很晚才能找到男朋友了,我可不可以35以后再结婚,如果结不了可不可以一辈子不结婚,被告知经济独立的话,可以,突然奇奇怪怪的年龄的焦虑又消失了!

4.21

做作业的一天,就原谅自己啦

跟妈妈讨论我是不是对自己不够狠,她说是

4.22

不准再难过了,某人一开始就没有想好好在一起,安慰不安慰,其实对于结果意义都不大

我想要好多好多爱,如果没有,那么好多好多钱也是好的。好想发财啊

4.23

废了好多天了,该学了

我妈说:“一定要低下头,你现在是什么都不懂的小朋友”,哈哈哈哈哈哈

今天体会了一下go和python的速度差,感受到参差了

4.24

别摆了!!!

最近哭的次数日渐减少,本来就是在没有想有对象的时间谈恋爱,本来就是错的,拨乱反正的开始,本来就会痛呀

相信自己能做到非常重要!!!我一定能做到的!!

换了一本新书来跟着练leetcode,逻辑跟我高中做物理差不多,分类型分模块

数组的二分查找,掌握全闭区间[left, right]的方式吧,关于这个方法的要点:

1. while的时候需要用到<=符号

2. if target > nums[middle]的时候,middle要+1,因为他已经>middle了,说明本来就不会取这个值了(多余的取,浪费时间

704. 二分查找

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left = 0
        right = len(nums) - 1

        while left <= right:
            if target > (nums[left] + nums[right]) / 2:
                left = (left + right) // 2
            elif target < (nums[left] + nums[right]) / 2:
                right = (left + right) // 2
            elif target == (nums[left] + nums[right]) / 2:
                return (left + right) // 2
        return -1

麻木了,又双叒超时了

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left = 0
        right = len(nums) - 1
        while left <= right:
            middle = (left + right) // 2
            if target > nums[middle]:
                left = middle
            elif target < nums[middle]:
                right = middle
            elif target == nums[middle]:
                return middle
        return -1

跟上面同质,所以也超时了,又去看了一下二分查找的内容,发现在闭区间下,若target > nums[middle],其实说明nums[middle]这个位置可以不考虑了,所以左边区间需要选middle + 1        :

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left = 0
        right = len(nums) - 1
        while left <= right:
            middle = (left + right) // 2
            if target > nums[middle]:
                left = middle + 1
            elif target < nums[middle]:
                right = middle - 1
            elif target == nums[middle]:
                return middle
        return -1

但是同样的+1,-1操作用在上面第一段做法就不太对,这个需要再问问看

4.25

依然是,好喜欢被鼓励的一天呀~被鼓励了就会好开心的

跟那个人,毫无深层次交流,不在一起也罢,可能他也会觉得我是个没内涵的人吧,可是我好像一直习惯对方先说,然后我来加入话题进行深层次讨论,并不习惯被直接问问题...下一次,勇敢的说出来,然后回去再讨论也是可以的

4.26

又摆了一天,今天种草了麦当劳的麻辣拌,果然我在实力允许的情况下执行力非常高(吃到了,难吃

34. 在排序数组中查找元素的第一个和最后一个位置

题目上问时间复杂度logn,那就是妥妥的二分查找了

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        left = 0
        right = len(nums) - 1
        while left <= right:
            middle = (left + right) // 2
            if target < nums[middle]:
                right = middle - 1
            elif target > nums[middle]:
                left = middle + 1
            else:
                first = middle
                last = middle
                if target == nums[first - 1]:
                    first -= 1
                if target == nums[last + 1]:
                    last += 1
                if first != last:
                    return[first, last]
                if first == last:
                    return[first]
        return[-1, -1]

嵌套了无数个if,写的时候感觉不太对,但是又说不好问题出在哪里,运行果然报错了

4.27

是废物没错了,哭了一天

举报

相关推荐

0 条评论