LeetCode75刷题记录

Level1 4/15

day1 2022-07-23

1.1480 一维数组的动态和,求一维数组各个位置的累加和

自己的解法:
每次f(i-1) + nums[i] 这其实是动态规划的思想,但我并没有意识到;

class Solution:
    def runningSum(self, nums: List[int]) -> List[int]:
        result = [nums[0]]
        for i in range(1,len(nums)):
            result.append(result[i-1]+nums[I])
        return result

题解:
使用前一个「动态和f(i-1)」来计算得到「当前动态和f(i)」,此题被化为一个简单的动态规划问题
题解

class Solution:
    def runningSum(self, nums: List[int]) -> List[int]:
        dp = [0] * len(nums)
        dp[0] = nums[0]
        for i in range(1, len(nums)):
            dp[i] = dp[i - 1] + nums[i]
        return dp

作者:jyd
链接:https://leetcode.cn/problems/running-sum-of-1d-array/solution/by-jyd-hz70/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

此外,我的写法和题解其实一样,并且都没有考虑到数组为空的情况,会报下标超出的错误,
改进的解法,如果数组为空就不会进入循环了:

class Solution:
    def runningSum(self, nums: List[int]) -> List[int]:
        result = []
        for i in range(len(nums)):
            if i == 0: #进入循环后说明数组不为空
                result.append(nums[I])
            else:
                result.append(result[i-1]+nums[I])
        return result

2. 724 寻找数组的中心下标,使得其左右的和相等

自己的解法:
每次都要重新计算索引位置的左右两边的和,O(n*(2n)) = O(n^2)

class Solution:
    def pivotIndex(self, nums: List[int]) -> int:
        if len(nums) == 0 :  # 长度为0的情况
            return -1
        elif len(nums) == 1 : # 长度为1必返回0
            return 0
        for i in range(len(nums)-1):
            if sum(nums[:i]) == sum(nums[i+1:]):
                return I
        if sum(nums[:-1]) == 0 :
            return len(nums)-1
        return -1

题解:
以中心坐标其左右的和 进行遍历,O(2n) = O(n)
返回值只有两种可能:1⃣️ -1 2⃣️ 索引值 ,不做多余的判断

class Solution:
    def pivotIndex(self, nums: List[int]) -> int:
        """
        左右的和 不包含索引所在位置的值
        """
        sum_left, sum_right = 0, sum(nums) # 初始化 中心坐标为-1
        for i in range(len(nums)):
        # 中心坐标为0时,左边和依然为0,右边和要去掉nums[0]
            sum_right -= nums[I] 
            if sum_left == sum_right:
                return i    
            else:
                sum_left += nums[I]
        return -1

day2

3. 同构字符串

image.png

try1: 题目前提两字符串长度相同,所以分别用字典记录字符第一次出现的索引以此为它们的编号,然后用列表分别记录两个字符的编号是否相同。

时间复杂度 O(n^2)

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        dic1, dic2 = {},{}
        note1, note2 = [],[]
        for i in range(len(s)):
            if s[i] not in dic1:
                dic1[s[i]] = I
            note1.append(dic1[s[I]])
            if t[i] not in dic2:
                dic2[t[i]] = I
            note2.append(dic2[t[I]])
        if note1 == note2:
            return True
        else:
            return False

题解:
记录映射关系,如果发现与之前已经存在的映射关系矛盾的新映射出现,则不符合。
我写的

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        dic1, dic2 = {},{}
        for i in range(len(s)):
            if s[i] not in dic1 and t[i] not in dic2:
                dic1[s[i]] = t[I]
                dic2[t[i]] = s[I]
            elif s[i] in dic1:
                if dic1[s[i]] != t[i] :
                    return False
            elif t[i] in dic2:
                if dic2[t[i]] != s[i] :
                    return False
        return True

题解写的:时空复杂度是相同的,但是比我写的语法简练

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        dic1, dic2 = {},{}
        for a,b in zip(s,t):
            if (a in dic1 and dic1[a] != b)\
            or (b in dic2 and dic2[b] != a) :
                return False
            else:
                dic1[a],dic2[b] = b,a
        return True

4. 判断一个字符串是否是另一个字符串的子串

没做出来
题解:双指针!

image.png

day3

5.合并两个升序 链表!

自己没做出来,不了解链表在python中的操作

  • 链表初始化l = ListNode(None)l =ListNone(-1)
  • 通常要保留下头节点lhead = l
  • 链表当前节点的取值l.val
  • 链表下一个节点信息 l.next
  • 链表指针后移l=l.next
    day3 5 合并升序链表

题解1:迭代


image.png

题解2: 递归


image.png

6. 反转链表

双指针!

image.png

递归!: head.next == None是找到了尾结点的标志,加head==None这一判断条件是因为head本身可能是空链表

image.png

day4:

7.返回链表的中间结点

image.png

try1: 遍历两次 O(n)


image.png

题解:快慢指针!(liweiwei1419)

  • 使用两个指针变量,刚开始都位于链表的第 1 个结点,一个永远一次只走 1 步,一个永远一次只走 2 步,一个在前,一个在后,同时走。这样当快指针走完的时候,慢指针就来到了链表的中间位置。
  • 思想是:快慢指针的前进方向相同,且它们步伐的「差」是恒定的,根据这种确定性去解决链表中的一些问题。


    image.png

8. 环形链表II 找链表中是否有环,有的话返回环开始的结点

image.png

try1: 用哈希表记录出现过的结点


image.png

day5

121. 买卖股票的最佳时机,只求最大利润

image.png

题解1: 遍历一次,每次更新最低价格,并求今天卖出可以得到的利润,不断更新最大利润


409.最长回文串

image.png

题解1:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容