自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 代码随想录算法训练营 Day2|数组2

利用python的sort方法,先平方,再排序。时间复杂度O(n)+sort()方法的时间复杂度看了文章后,看了图定义新列表 无限大值。

2024-04-01 16:34:37 272

原创 代码随想录算法训练营 Day41 动态规划3

不知道如何拆分,才能使乘积最大化有什么理论依据?根据代码随想录根据题目,发现,拆分后的数可以继续拆分,因此可以用动规的思路总结:一开始不知道怎么拆最大,觉得会有一个特别的逻辑,但是实际写代码的时候,是一个暴力的方式将所有的情况都考虑,再比较取值的。

2024-04-01 15:19:11 446

原创 代码随想录算法训练营 Day39 动态规划2

dp[m,n]表示第(m, n)格总共有dp[m,n]条不同的路径递推公式由(m - 1, n)格(m, n - 1)格的路径之和得出初始化,应该初始化最上面一行和最左边一列成功通过!总结注意创建二维数组时第一个n表示列,第二个m表示行。

2024-03-30 17:04:18 760

原创 代码随想录算法训练营 Day38 动态规划1

自己写的时候,容易弄不清楚,下标应该从哪里开始,哪里结束,往往是运行出错后,发现下标不对。这里的递推公式为,根据cost算出从i-1个开始爬和i-2个开始爬,花费最少的费用。第i阶楼梯的方法,是第i-1阶的方法和第i-2阶的楼梯方法之和。dp[i]的含义,爬到第i个台阶需要支付的费用。dp[i]表示爬到第i个台阶,有多少种方法。因此递推公式类似于斐波那契数。根据题意,尝试写代码。

2024-03-29 17:10:15 269

原创 代码随想录算法训练营 Day35 贪心算法4

定义列表,存储拥有的5元、10元钞票的个数局部最优:每次新的顾客给的钱需要找零,从已有的零钱数中减去,优先找零10元的,如果没有,则返回False这里是每次找零钱都判断是否有零钱,没有直接返回false。

2024-03-29 15:48:46 368

原创 代码随想录算法训练营 Day34 贪心算法3

tbd。

2024-03-29 15:33:07 439

原创 代码随想录算法训练营 Day31 贪心算法1

贪心算法的本质:找到每个阶段的局部最优,从而去推导全局最优贪心的两个极端:要么觉得特别简单,要么觉得特别难贪心无套路不像二叉树、递归,有固定模式贪心题目的思考方式做题的时候,想到局部最优是什么,然后能够推出全局最优,且想不到反例,就可以试一下贪心。

2024-03-29 15:04:47 655

原创 代码随想录算法训练营 Day29 回溯算法5

跟上一题类似,需要去重但问题是该题要求递增子序列,因此不能在一开始将数组排序,不知道这种情况如何去重根据代码随想录。

2024-03-23 19:10:47 243

原创 代码随想录算法训练营 Day28 回溯算法4

跟上一题分割回文子串类似,用startIndex表示分割线但是四个整数不知道怎么表示,且不能有前导0也不知道怎么判断根据代码随想录总结:还是没想通,自己的代码为什么不对?

2024-03-23 12:27:53 207 1

原创 代码随想录算法训练营 Day27 回溯算法3

可以剪枝,先对数组排序,然后在for循环中一开始,先判断当前sum + 当前值是否大于目标值,如果是,就continue。这道题与之前的组合总和的区别在于,数组中的数字可以多次使用,因此每次递归时的startIndex依旧是从当前的i开始。在python中,每次得到的组合加入result之前,先判断下result中是否有该组合。由于给定的数组中包含重复元素,最终结果可能出现重复的组合,因此需要对最终结果进行去重。结果不对,去重失败,因为每个组合的排列顺序不一样,无法通过简单的in来判断。

2024-03-22 18:45:20 304

原创 代码随想录算法训练营 Day25|回溯算法2

这样就不需要在for循环内增加条件,因为只要path的长度到k,都会返回,只不过如果再满足sum=n的话,就将当前的path加入result。递归函数的参数,除了原有的n, k, startIndex,增加一个sum,计算当前path中的和。终止条件,先判断path长度是否为k,如果不满足,返回;终止条件用sum与n比较,如果满足相等,且满足长度为k,则加入result。先按照流程,递归函数的终止条件,如果是之前的题,需要判断path的长度,要求共有k个数,如果后面要取的数不够了,剪枝。

2024-03-17 00:05:45 343

原创 代码随想录算法训练营 Day24|回溯算法1

如果暴力解题,k=2,可以用两层for循环搞定,但如果k=50,嵌套50层for循环不太现实。树的宽度就是回溯法中处理的集合的大小,通常用for循环遍历。画一个n叉树抽象问题,但不知道怎么按照题意画出来。尝试套模板,不清楚这里的终止条件怎么表示。这种情况用回溯,回溯用递归控制嵌套的层数。通常递归函数下面的部分就是回溯的逻辑。回溯法一般可以抽象为一个n叉树的结构。深度代表递归,即从1到n的for循环。通过一个树形结构,表示这种嵌套关系。回溯实际上是一个纯暴力的搜索。宽度代表要处理的集合。

2024-03-16 17:56:56 407

原创 代码随想录算法训练营 Day23|二叉树9

取数组最中间的元素为根节点,左右两边递归,将新元素加入二叉树中。则从中间向外递归,左边更小的放入左节点,右边更大的放入右节点。二叉搜索树是按照中序遍历的顺序递增,累加树按照中序遍历递减。但是不对,不知道在非递归的时候,如何再循环中创建二叉树。想到了大致的解法,但不知道代码怎么写。递归就思考一个通用的递归逻辑,本题迭代法比较复杂。

2024-03-14 22:40:53 335

原创 代码随想录算法训练营 Day22|二叉树8

我一开始在终止条件就判断,应给分配给左节点还是右节点,这种思路会有很多可能性,就需要写很多个条件判断去处理,非常麻烦。直接考虑碰到叶子节点,即当前节点为空时就插入新节点,在后面递归时,再判断,将其分配给左节点还是右节点。如果当前节点比p和q都大,则向左遍历;如果当前节点既有左孩子也有右孩子,则将右节点提上来。向左向右遍历的情况之外,直接返回当前节点就行了。因为如果当前值的右孩子下面都是满的,则错误。如果只有左孩子,则返回左孩子;如果当前节点在p和q之间,则返回该节点。如果值比节点大,向左遍历;

2024-03-13 19:10:15 355

原创 代码随想录算法训练营 Day21|530.二叉搜索树的最小绝对差, 501.二叉搜索树中的众数, 236. 二叉树的最近公共祖先

与验证二叉搜索树思路一样,只不过在中序遍历时,得到前后两个节点的差值,并持续记录最小差值。成功通过!

2024-03-12 19:51:22 294

原创 代码随想录算法训练营 Day20|654.最大二叉树, 617.合并二叉树, 700.二叉搜索树中的搜索, 98.验证二叉搜索树

前序遍历流程与前两题相似根据最大值所在的index,切割数组,得到的左数组和右数组分别递归尝试写代码成功通过!

2024-03-12 16:45:02 309

原创 代码随想录算法训练营 Day 18|513.找树左下角的值, 112. 路径总和, 113.路径总和ii, 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

自己的思路基本上想到了递归的顺序,想到了回溯的过程,甚至想到了直接用给定值减去遍历的节点,只是对于返回值的处理还需要整理。因为本题只要有一个答案就可以返回True,因此不需要遍历全部的二叉树,所以遇到满足条件的,直接返回True就行。此外,需要了解递归过程中的首尾值的处理,这里的单层递归逻辑中,没有处理到根节点,需要在一开始处理。

2024-03-10 23:46:25 930

原创 代码随想录算法训练营 Day17|110.平衡二叉树, 257. 二叉树的所有路径, 404.左叶子之和

平衡二叉树,左右子树的高度差不超过1。后序遍历,如果一个节点的左节点和右节点的高度差不超过1,则返回最深的节点高度,通过左右中的方式,将结果向上传递。结果不对。不清楚返回值如何写。每次如果返回了节点的高度值,就无法返回判断结果(True or False)根据代码随想录视频结果依旧不对。返回值是某个具体的数字,而不是题目要求的True或者False。此时可以重新创建一个函数,将之前的所有操作放进新函数中,在本身判断是否是平衡二叉树的函数中调用该函数。

2024-03-09 00:05:49 374

原创 代码随想录算法训练营 Day16|104.二叉树的最大深度, 559.n叉树的最大深度, 111.二叉树的最小深度, 222.完全二叉树的节点个数

尝试用递归,后序遍历没有思路。深度:二叉树中的节点到根节点的距离。高度:与深度相反,二叉树中的节点到叶子节点的距离。求高度,使用后序遍历,从下往上数。求深度,使用前序遍历,中左右,往下遍历一个加一。根据代码随想录视频。

2024-03-07 23:57:54 320

原创 代码随想录算法训练营 Day7|454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和

Day7|454.四数相加II, 383. 赎金信。

2024-03-06 23:35:09 374 1

原创 代码随想录算法训练营 Day15|层序遍历10, 226.翻转二叉树, 101.对称二叉树 2

层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。层序遍历方式就是图论中的广度优先遍历。需要借用一个辅助数据结构即队列来实现,,而用。

2024-03-06 23:23:46 878 1

原创 代码随想录算法训练营 Day13|239. 滑动窗口最大值, 347.前 K 个高频元素

写代码的时候没想到要用class去构造一个单调队列,甚至包括push,pop等方法也要重新构造。之后需要再自己写一遍。

2024-03-05 23:47:41 328 1

原创 代码随想录算法训练营 Day4|24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点, 面试题 02.07. 链表相交, 142.环形链表II

其次,寻找环的入口从头结点出发一个指针,从相遇节点也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是环形入口的节点。

2024-03-04 23:53:53 383 1

原创 代码随想录算法训练营 Day14|二叉树理论基础,递归遍历,迭代遍历,统一迭代

每层的节点都是最大值。除了最底层,其余每层的节点都是最大值,且最底层的节点从左往右依次增加。左子树上所有节点小于根节点,右子树上所有节点大于根节点。左右子树的高度差绝对值不超过1.

2024-03-04 23:14:58 315

原创 代码随想录算法训练营Day3|203.移除链表元素, 707.设计链表, 206.反转链表

移除链表元素,让节点next指针直接指向下下一个节点。如果删除的是头结点,则可以设置一个虚拟头结点,再进行删除操作。此时的时间复杂度为O(n)

2024-03-04 00:17:08 359

原创 代码随想录算法训练营 Day9|28. 实现 strStr(), 459.重复的子字符串

自己没太有思路看了代码随想录的文章,了解KMPkmp算法主要用来解决字符串匹配问题KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。

2024-03-03 00:32:51 351

原创 代码随想录算法训练营 Day11| 20. 有效的括号, 1047. 删除字符串中的所有相邻重复项, 150. 逆波兰表达式求值

创建一个list作为栈,保证如果当’(‘入栈时,下一个为’)‘才能出栈,这样每个左括号都能够按顺序匹配右括号。问题: 如果一开始就是右括号,则该代码 out of range根据代码随想录的答案,入栈的时候直接放入右括号,在判断是否和下一个相等。

2024-03-03 00:20:41 386

原创 代码随想录算法训练营 Day10|栈与队列理论基础, 232.用栈实现队列, 225. 用队列实现栈

栈(stack):先进后出队列(queue):先进先出。

2024-03-02 00:09:27 395 1

原创 代码随想录算法训练营Day8|344.反转字符串, 541. 反转字符串II

使用双指针,将左右指针指向的字符互换,直到左指针不小于右指针。

2024-03-01 22:39:06 354 1

原创 Day6|哈希表理论基础 242.有效的字母异位 349. 两个数组的交集 202. 快乐数 1. 两数之和

哈希表是根据关键码的值而直接进行访问的数据结构。一般哈希表都是用来快速判断一个元素是否出现集合里。Python 中的字典就是用哈希表来实现的。

2024-02-28 00:39:01 302

原创 代码随想录算法训练营 Day 1|704.二分查找,27.移除元素

一开始自己写代码时,总是将具体的例子代入到代码中,结果就是测试用例过了,但提交时会有新的测试用例报错。如果一开始就明确了区间定义,那么只需要在关键的几个点(赋值以及循环条件判断)根据已有的区间定义写代码,就能保证正确。由于本题需要考察的就是删除数组元素方法的底层实现,所以不能直接用python已有的方法去做。

2024-02-21 21:46:33 980 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除