叮叮咚咚响叮咚
码龄4年
求更新 关注
提问 私信
  • 博客:26,887
    26,887
    总访问量
  • 30
    原创
  • 344
    粉丝
  • 12
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:美国
加入CSDN时间: 2021-01-26
博客简介:

m0_54919454的博客

查看详细资料
个人成就
  • 获得440次点赞
  • 内容获得8次评论
  • 获得423次收藏
  • 博客总排名898,699名
创作历程
  • 4篇
    2024年
  • 26篇
    2023年
成就勋章

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 1

TA参与的活动 0

创作活动更多

王者杯·14天创作挑战营·第2期

这是一个以写作博客为目的的创作活动,旨在鼓励码龄大于4年的博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。 注: 1、参赛者可以进入活动群进行交流、分享创作心得,互相鼓励与支持(开卷),答疑及活动群请见https://bbs.csdn.net/topics/619735097 2、文章质量分查询:https://www.csdn.net/qc 我们诚挚邀请你们参加为期14天的创作挑战赛!

66人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

算法练习Day30 (Leetcode/Python-动态规划)

这里要看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。
原创
发布博客 2024.01.17 ·
1699 阅读 ·
20 点赞 ·
0 评论 ·
22 收藏

算法练习Day29 (Leetcode/Python-动态规划)

Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,,贪心没有状态推导,而是从局部直接选最优的,
原创
发布博客 2024.01.07 ·
590 阅读 ·
11 点赞 ·
0 评论 ·
11 收藏

算法练习Day28 (Leetcode/Python-贪心算法)

思路,此题求小于给定的数值N的最大的单调递增序列。对于每个数位,从后向前遍历,但凡发现前一位N[i-1]比后一位N[i]大,能做的就是把后一位N[i]置9,前一位置N[i-1]-1。
原创
发布博客 2024.01.05 ·
626 阅读 ·
9 点赞 ·
0 评论 ·
7 收藏

算法练习Day27 (Leetcode/Python-贪心算法)

若气球1是[2,5], 气球2是[3,6], 那么这个交集的区间是[3,5], 左边界是3,右边界是5,如果新来的气球的左边界大于了5,那么就无法用同一支箭射穿了。这种情况下,写法上可以选择更新原气球数组,每次都把当前气球i的左右边界更新为当前箭可射穿的左右边界,如果下一个气球i依然可以被同一支箭射穿,那就继续更新下一个气球的右边界,否则就不更新了,算是新一支箭的左右边界。因为排过序,新的左边界肯定大于旧的左边界,所以只要新的左边界小于旧的右边界,左边界就一定是落在原来区间的,反之则不然。
原创
发布博客 2024.01.02 ·
1246 阅读 ·
25 点赞 ·
0 评论 ·
21 收藏

算法练习Day26 (Leetcode/Python-贪心算法)

思路:每次都可以跳全局最优,即贪心算法。
原创
发布博客 2023.12.31 ·
1778 阅读 ·
11 点赞 ·
0 评论 ·
16 收藏

算法练习Day25 (Leetcode/Python-贪心算法)

暴力解法O(n^2)的复杂度,做两次循环,遍历所有可能的子序列。可以从大饼干和胃口大的孩子开始遍历,本着不浪费的原则,大饼干优先满足大胃口的孩子,对于每一块饼干,将胃口从大到小的孩子和它一一对应,如果满足了一个孩子,则move to下一块次大的饼干。思路:分饼干,一个饼干最多分给一个人,若饼干大小>=孩子胃口则该孩子获得满足,设计算法尽可能满足更多的孩子。值,O(n)和O(n log n)可能相当接近。的增大,O(n log n)的增长速度将超过O(n)。
原创
发布博客 2023.12.30 ·
1384 阅读 ·
19 点赞 ·
0 评论 ·
21 收藏

算法练习Day24 (Leetcode/Python-回溯算法)

思路:分割一个字符串为四段,输出所有满足有效IP地址的分割。分为四段就是切三刀,判断每一段是不是有效,切完三刀后,看第四段是否符合要求,如果还是符合,就输出该结果,否则直接return。思路:列举所有可能的子集。那么所有的子集都是可以在backtrack中被放入result的,而不需要特别的判断了。因为是原数组内无元素重复,所以也不用担心子集重复。
原创
发布博客 2023.12.28 ·
651 阅读 ·
9 点赞 ·
0 评论 ·
8 收藏

算法练习Day23 (Leetcode/Python-回溯算法)

待取元素的candiate内无重复,区别于之前的组合问题,这里在横向遍历时for循环需要遍历所有元素,而不是在startIndex之后的元素(因为排列可以取[1,2,3],[1,3,2]这样的元素,组合的话就只能取[1,2,3],而无[1,3,2])。但是为了避免与纵向已经取过的元素在一个path里重复,要设置一个used元素记录之前path里已经取过的元素。其实只要每次横向遍历不用本次横向遍历里已经用过的元素就可以了。因为这个新元素最后可以取得的有效升序子序列之能是之前这个元素可以取得的有效子集。
原创
发布博客 2023.12.28 ·
977 阅读 ·
9 点赞 ·
0 评论 ·
8 收藏

算法练习Day22 (Leetcode/Python-回溯算法)

思路:从无元素重复的candidates中找和为target的组合,每一个组合中candidates中的元素可以被多次重复选取。是一个有效的选择,它可以在同一路径中多次被选择。(昨天那道题目里,元素不能被重复选取,所以传入的。本身),这意味着你不会在后续的递归中重新考虑之前已经处理过的元素。开始循环,算法仍然确保了不会生成重复的组合。这意味着在每一层递归中,都可以重新选择当前正在考虑的数字。这道题和昨天的非常类似,只不过昨天的不能重复选取。已经被考虑过,那么在后续的递归中就不会再生成。
原创
发布博客 2023.12.25 ·
1020 阅读 ·
18 点赞 ·
0 评论 ·
19 收藏

算法练习Day20 (Leetcode/Python-回溯算法)

虽然看似进入了一个新章节,但其实还是前几天二叉树章节的延续。。
原创
发布博客 2023.12.24 ·
771 阅读 ·
10 点赞 ·
0 评论 ·
11 收藏

算法练习Day21 (Leetcode/Python-回溯算法)

这里一个数字对应三个字母,所以相当于二叉树变得更宽了(每一层有更多的子节点)。另外注意,这里用来记录每条“路径”的是string,所以不能用pop()来回溯,而要用[:-1]思路:和昨天的那题很相似,不过结束条件不太一样。以及在回溯的时候需要多记录一个值。
原创
发布博客 2023.12.24 ·
1128 阅读 ·
10 点赞 ·
1 评论 ·
4 收藏

算法练习Day19 (Leetcode/Python-二叉树)

一点碎碎念:写博客的初衷就是记录自己的练习的过程。所以这个博客里的大部分答案是源于其他博客的,主要是卡哥的代码随想录(link见reference),我只是答案的搬运工,不过我附上了主要是自己写的思路。写这个博客的目的是记录思路方便自己回看复习,也是站在一个刷题入门者的角度阐述一下自己的思路吧,如果能鼓励到其他刷题的同路人或者带来一点点的启发也算是额外之喜了。注意二叉树是有序的,根据例子,是进行了右中左的顺序累加的。思路:二叉搜索树上每个节点按序累加之前的节点值之和,成为更大的节点值。
原创
发布博客 2023.12.22 ·
1176 阅读 ·
15 点赞 ·
0 评论 ·
17 收藏

算法练习Day18 (Leetcode/Python-二叉树)

思路:这道题仅仅是要求以合理方式把一个值插入二叉树搜索树中,由于二叉搜索树是有排序的(右子树值>父节点值>左子树值),所以只要把这个值插入到叶节点下就是合理的,这样原有的tree的结构几乎不用调整。如果找到一个节点,发现p在其左子树,q在其右子树或者反之,该节点即是公共祖先。注意,有可能某节点并没有左或者右子树了,即该节点自己既是p或者q,又是待求的公共祖先。思路:删除binary search tree的一个节点比加入一个节点要难。因为如果被删除的节点左右子树都存在,那么就需要考虑补位问题。
原创
发布博客 2023.12.21 ·
1079 阅读 ·
22 点赞 ·
0 评论 ·
20 收藏

算法练习Day17 (Leetcode/Python-二叉树)

思路:BST 是一个有序的二叉树(左子树所有节点小于其父节点的值,右子树的所有节点的所有值则大雨其父节点的值。左右子树也分别是二叉树。),所以这道题就先按顺序遍历数组,然后两两相邻值相减,最小的差值就是要求的。思路:这题求树的最后一层的最左节点。注意仅仅通过递归求后续遍历的方式找到最左节点是不够的,还要满足在最后一层。所以要选深度最大的最左叶节点。
原创
发布博客 2023.12.20 ·
472 阅读 ·
7 点赞 ·
1 评论 ·
8 收藏

算法练习Day16 (Leetcode/Python-二叉树)

注意递归代码里是在input时就算好了当前路径(包含当前节点的子节点)的sum值,进入递归代码后先判断sum是否符合要求。如果不符合,跳出递归后把当前节点的子节点减去,然后再探索下一个子节点。即该节点无左右子节点,且是父节点的左节点。右子节点可能有它的左叶子节点,左子节点也可能有它的左叶子节点。遇到左叶子节点的时候,记下数值。通过递归法求左子树左叶子之和和右子树左叶子之和,相加起来就是整个树的左叶子之和。3)搜索其中一条符合条件的路径,就需要返回值,以便在遇到合适的路径时返回。递归法则是代码更为简洁。
原创
发布博客 2023.12.19 ·
1131 阅读 ·
20 点赞 ·
1 评论 ·
21 收藏

算法练习Day15 (Leetcode/Python-二叉树)

思路:这里用迭代法,记录从root到当前节点的路径path于path_st。当当前节点为叶节点后,将到该叶节点的这条路径push入path中。并在处理完stack中所有节点后,输出path。stack后进先出来实现DFS。思路: 判断二叉树是否平衡,也就是二叉树的任何节点的左右子树高度差值不能超过1。这和求子树高度的题目类似。使用递归法时,但凡有个节点的左右子树高度差超过1,就一直return -1了,也就是不满足balanced了。
原创
发布博客 2023.12.18 ·
409 阅读 ·
8 点赞 ·
0 评论 ·
7 收藏

算法练习Day14 (Leetcode/Python-二叉树)

今日时间有限,只来得及做一题,周末再补上。
原创
发布博客 2023.12.15 ·
460 阅读 ·
8 点赞 ·
0 评论 ·
8 收藏

算法练习Day13 (Leetcode/Python-二叉树)

算法和时间复杂度都为O(N)。因为每个节点都要被遍历到,所以时间是O(N)。队列在最坏的情况下,也就是完全二叉树,队列包含树的最后一层的节点时,达到队列长度的最大值,即至多(N/2)+1个节点,所以空间复杂度是O(N)。但有时树的宽度也可以较窄。按层从上到下从左到右输出二叉树的值。注意,输出格式每层为一个list。
原创
发布博客 2023.12.14 ·
485 阅读 ·
7 点赞 ·
1 评论 ·
7 收藏

算法练习Day12 (Leetcode/Python-二叉树)

如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k,有2^k-1个节点的二叉树。除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(h从1开始),则该层包含 1~ 2^(h-1) 个节点。有数值,。又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
原创
发布博客 2023.12.13 ·
396 阅读 ·
10 点赞 ·
0 评论 ·
9 收藏

算法练习Day11 (Leetcode/Python-堆栈和队列)

思路:维护一个长度为当前window长度的单调队列,每次output这个单调队列里最大的值就是所求的值。第二种写法里,单调队列中维护的是元素的序号而不是值本身,这样在判断是否需要挪出单调队列中最左(最大)的元素时,用if i-d[0] >= k: d.popleft()即可,感觉更加优雅。因为 heapq.heappop(pri_que), heapq.heappush(pri_que, (freq, key)) 的复杂度是O(logk),最多有n个元素要被push,复杂度就为O(nlogk)了。
原创
发布博客 2023.12.12 ·
1094 阅读 ·
22 点赞 ·
0 评论 ·
22 收藏
加载更多