- 博客(28)
- 收藏
- 关注
原创 7.31代码随想录训练营第34天| 贪心算法题目练习:1005.K次取反后最大化的数组和 ,134. 加油站 ,135. 分发糖果
【代码】7.31代码随想录训练营第34天| 贪心算法题目练习:1005.K次取反后最大化的数组和 ,134. 加油站 ,135. 分发糖果。
2023-08-01 14:08:10
45
原创 7.29 代码随想录训练营第32天|贪心算法题目:122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II
【代码】7.29 代码随想录训练营第32天|贪心算法题目:122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II。
2023-07-29 16:16:32
47
原创 7.28代码随想录训练营第31天 |贪心算法题目练习:455.分发饼干 ,376. 摆动序列 , 53. 最大子序和
【代码】7.28代码随想录训练营第31天 |贪心算法题目练习:455.分发饼干 ,376. 摆动序列 , 53. 最大子序和。
2023-07-29 00:56:03
44
原创 7.26代码随想录训练营第29天 | 回溯题目练习:491.递增子序列 , 46.全排列 , 47.全排列 II
【代码】7.26代码随想录训练营第29天 | 回溯题目练习:491.递增子序列 , 46.全排列 , 47.全排列 II。
2023-07-25 22:49:36
39
原创 7.25代码随想录训练营第28天|回溯题目练习:93.复原IP地址 ,78.子集 , 90.子集II
对于这道题我们除了要写递归方法还要再写一个方法来判断字符串的这个数字是否大于255,或者这个数的第一个数字是否为0。对于递归方法我们可以插入的点来作为标记,可以直接在字符串中插入点,结合判断是否为有效数字的方法,可以将点放在正确的地方。当点的个数达到3个就是停止的条件。这个和昨天写的组合总和II中的逻辑是差不多的。因为要避免出现重复的组合,可以使用一个波尔数组来判断元素是否已经使用过了。
2023-07-25 15:16:19
20
原创 7.24代码随想录训练营第27天| 回溯题目练习:39. 组合总和,40.组合总和II,131.分割回文串
这道题我们除了写一个递归的方法还要写一个方法来判断这个字符串是否为回文字符。
2023-07-23 22:14:14
31
原创 7.22代码随想录训练营第25天|回溯题目练习:216.组合总和III ,17.电话号码的字母组合
【代码】7.22代码随想录训练营第24天|回溯题目练习:216.组合总和III ,17.电话号码的字母组合。
2023-07-22 20:44:56
47
原创 7.20代码随想录训练营第23天 | 二叉树题目练习:669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树
今天没有时间分析题目,只是把代码抄了一遍,之后有时间再回来编辑一下。今天继续来做二叉树的题目。
2023-07-20 16:55:47
22
原创 7.19代码随想录训练营第22天| 二叉树题目练习:235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
今天继续来做二叉树的题目。
2023-07-19 23:00:37
23
原创 7.18代码随想录训练营第21天| 二叉树题目练习:530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先
中序顺序遍历因为左边的数会小于右边的数,这样一来就是一个从小到大的顺序。今天继续来做二叉树的题目。
2023-07-18 19:57:45
30
原创 7.17代码随想录训练营第20天| 二叉树题目练习:654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树
这道题的逻辑很简单,就是在数组中找出最大的数字然后再对数组进行分割,再在分割的数组中继续找最大的数字。重复这样的步骤直到找完整个树中的元素就行了。这里我用的是前序遍历的顺序,调换一下代码前后的顺序就可以用中序遍历或者后序遍历。今天继续来写二叉树的题目。
2023-07-17 21:16:06
34
原创 7.15代码随想录训练营第18天 |二叉树题目练习:513.找树左下角的值,112. 路径总和,113.路径总和ii ,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树
今天继续来做二叉树的题目。
2023-07-15 21:06:49
54
原创 7.14代码随想录训练营17天 | 110 平衡二叉树, 257二叉树所有路径,404左叶子之和
这里使用的是后序遍历的方法。今天继续来做二叉树的题目。
2023-07-14 16:48:53
29
原创 7.13代码随想录训练营第16天 | 二叉树题目练习:104.二叉树的最大深度, 559.n叉树的最大深度,111.二叉树的最小深度, 222.完全二叉树的节点个数
计算n叉树的最大深度跟计算二叉树的最大的深度是差不多的。在二叉树中只有左孩子和右孩子,但是在n叉树中有n个孩子所以需要写一个for循环遍历到这一层的每一孩子就行了。计算最大深度其实就是使用层序遍历,当到每一层的第一个元素时,深度就加一,直到达到下一层。通过层序遍历,我们可以判断每个元素是否有孩子,如果没有孩子那么这个元素所在的层级就是最小深度。与计算深度不一样的是,直接在每一层的for循环里面写计数++,这样就是每次遍历到一个元素计数就加一而不是每一层计数才加一。今天继续来做二叉树的题目。
2023-07-13 16:54:51
20
原创 7.12代码随想录训练营第15天| 二叉树题目练习:二叉树层序遍历,226翻转二叉树,对称二叉树
二叉树的层序遍历就是从根开始以从左到右的顺序来遍历每一层的元素。因此我们可以使用队列,因为我们需要将以及遍历过的元素弹出去,也就是谁先进来谁先走,这也符合了队列的特性。在队列最前的元素我们继续寻找他的子元素,然后并将子元素加到队列的后面。翻转二叉树其实就是交换左子树和右子树,所以递归法的逻辑很简单。之后分别从左子树和右子树开始交换他们的左子树和右子树的位置,直到遍历完整个树。这道题与第一题唯一不同的地方在于就是把数组中的数组顺序给翻转一下,代码的不同也就是在倒数第二行使用reverse方法就行。
2023-07-12 21:08:29
22
原创 7.11 代码随想录训练营第14天 | 二叉树题目练习:144.二叉树的前序遍历, 145.二叉树的后序遍历, 94.二叉树的中序遍历
我们可以利用栈来实现前序遍历,然而由于栈的特性当我们将栈中的元素放到数组里面是以从后往前的顺序来放入的,所以这就会导致放入数组中的元素会反过来那就不是前序遍历了。不过我们可以将元素放入栈时的顺序调换一下,也就是让树的右边子树先进栈,然后再让左边的子树进栈,最后弹出栈中的元素就是正确的顺序了。中序遍历的迭代法和前序遍历以及后序遍历的方法不太一样,他的栈先是存储左子树的元素,然后再寻找是否有右子树,如果有的话就将右子树放入栈中并在右子树中继续寻找左子树,直到栈弹出了所有元素。的顺序来对二叉树进行遍历的。
2023-07-11 14:56:44
62
原创 7.8代码随想录训练营第11天 | 栈和队列题目练习:20. 有效的括号, 1047. 删除字符串中的所有相邻重复项 , 150. 逆波兰表达式求值
这道题我们也可以使用栈来做。通过遍历字符串将字符一个一个放入栈中,如果下一个字符和栈中最后加入的字符相同就从栈中删除这个字符,然后继续遍历。由于题目要求返回一个字符串,我们通过遍历栈中元素,从后往前将字符加入到新的字符串中直到栈为空。这道题可以使用栈来解决,只要碰到前括号我们就在栈里面增加一个这个括号的反括号。如果碰到了反括号,就查找栈的最后一个的元素是否与这个反括号一致,如果一致就将栈里面的反括号删掉。这个栈的作用就是用来记录正确的对应的反括号,所以一旦出现反括号不一致就说明字符串里的括号不是有效的。
2023-07-07 23:31:10
26
原创 7.7 代码随想录训练营第10天 | 栈和队列题目练习: 232.用栈实现队列 , 225. 用队列实现栈
首先是push方法,这个跟栈中的push方法没有区别,所以直接使用栈的push方法。然后是pop方法,由于队列是从前面开始取出,而栈是从最后面开始取出,我们可以使用输出栈来存储倒过来的输入栈,最后再将最左边的元素给取出就行。再就是peek方法,获取到栈里面的第一个元素,我们可以用之前写的pop方法获取到最左边的元素,最后再将这个元素加回去即可。最后是empty方法,只要输出栈和输入栈都为空的,那么此时才算空。这道题和第一题非常的相似,只不过是用队列的方式来实现栈。今天来做有关于栈和队列的题目。
2023-07-07 14:26:25
28
原创 7.6 代码随想录训练营第9天 | 字符串题目练习:28. 实现 strStr() ,459.重复的子字符串
因为在这道题中我们需要计算一个子字符串在整个字符串出现的次数,所以在next数组当中最后一个字符储存的值一定不为-1.如果最后一个字符储存的值不为-1那就说明这个字符串里是有重复的子字符串的我们需要将其算出来。我们可以利用next数组存储的最长前缀和后缀来计算重复的子字符串出现的次数,如果可以被字符串的总体长度整除并且最后一个字符的最长前缀和后缀不为-1,那就说明出现了一定数量相同长度的子字符串,这样就可以返回ture.28. 实现 strStr()今天继续来做两道字符串的题目。
2023-07-06 17:51:45
50
原创 7.5代码随想录训练营第8天 | 字符串题目练习
一样也是可以解决的。最后利用原先的字符串的大小,和现在的字符串的大小,在字符串进行一个遍历,边遍历边填入字符。这道题算是很经典的一道字符串类型的题目,不过他的代码逻辑很简单,一个指针指向字符串的左端,另一个指针指向字符串的右端,然后使用swap的方法将这两个字符换一下位置。如果反转到最后,字符串的字符小于k个就反转剩下的所有字符,并且如果字符串的字符个数小于等于2k还是反转前k个字符。这道题的做法是我们得先把字符串中多余的空格删除掉,然后反转整个字符串,最后将字符串中每个空格前面的单词再进行一次反转。
2023-07-05 15:19:35
30
原创 7.4代码随想录训练营第七天| 哈希表题目练习:454.四数相加II ,383. 赎金信 , 15. 三数之和 ,18. 四数之和
要找到相加为0的三个数我们可以先将这个数组排序一下,然后设置三个指针,一个指针从头开始,第二个指针从第二个元素开始,第三个指针从最后开始。此时我们就可以开始遍历数组了,如果总和为0我们就在set中插入这个三个数组成的数组,然后更新第二个指针和第三个指针的为。由于题目要求是四个数相加为0,继续遍历余下的两个数组,在之前的map里面找出0减去余下的两个数组里每两个数字之和,最后更新计数就行了。这道题和前面的三数之和很像,唯一不同的是我们要找出四个数并且题目要求的总和是会变得,而不再是总和为0。
2023-07-04 14:27:45
18
原创 7.3代码随想录训练营第六天| 哈希表题目练习:242.有效的字母异位词 , 349. 两个数组的交集 , 202. 快乐数 ,1. 两数之和
unordered_set在这里的作用就是发现重复的总和,如果出现了重复的总和这就意味着一个循环无法达到总和为一的结果。所以一旦出现了重复的总和就return false,如果没有出现重复的总和的总和也没有为1那么就讲这个总和插入到set里面,在进行新一轮的计算。寻找这两个数也很简单,就是从数组的第一个数开始,然后用target减去这个数,也就是在剩下的数组里面找他们的差值。这道题我是用map来做的,在遍历字符串s的时候将s的字符放入map里面,记录数值,同时将字符串t里的字符从map中拿出来,记录数值。
2023-07-03 15:45:12
14
原创 7.1 代码随想录训练营第四天| 链表题目练习:24. 两两交换链表中的节点 ,19.删除链表的倒数第N个节点 , 160. 链表相交 ,142.环形链表II
这道题我们可以先遍历A链表和B链表获取每个链表的长度,然后使用两个链表之间的差值,来取决于长一点的链表的开始位置。这样两个链表就对齐了,然后再遍历余下的链表,来判断两个指针是否在一个节点上,如果是就说明他们相交了。这道题可以先定义一个虚拟头节,然后使用快慢指针。快指针先走n+1步,然后快指针和慢指针一起移动,最后快指针指向NULL,而慢指针正好指向要删除的节点的前一个。今天的任务是做四道有关链表的题目,首先来看第一道。这道题我们可以使用快慢指针来判断链表是否是循环的。这道题使用虚拟头结点会方便很多。
2023-07-01 16:35:32
15
原创 6.30 代码随想录训练营第三天 |链表题目练习:203.移除链表元素 , 707.设计链表 , 206.反转链表
这道题如标题一样就是将链表翻转一下,最后一个元素变成了head,而第一个元素最后指向NULL。但是需要分为两种情况,第一种是要删除的元素在链表的开头,另一种是要删除的元素在链表开头之后。这道题的解题思路很简单,无非就是遍历链表然后找到要删除的那个元素,把它移出链表即可。因此有两种方法来完成这道题,一种是双指针,另一种是递归。今天来练习三道有关于链表的题目,首先来看第一题。题目是给你一个链表,删除链表中某个元素。
2023-06-30 14:25:22
15
原创 6.29 代码随想录训练营第二天 | 数组题目练习:977有序数组的平方, 209长度最小的子数组,59螺旋矩阵II
然后我们遍历数组,并与题目给的数进行比较,数组里一些数的和比题目的数要大或者相等,那么就使用两个指针的差值并加1算出长度。这道题的题目是给你一个数以及一个数组,你将数组里的数相加能够正好等于或者大于题目给的数,并且这个几个相加的数在数组里面是连续的,并且在数组里的长度最小。这道题的题目是给你一个从小到大排序的数组,要求你将数组里的每个数变成这个数的平方,并且还是以从小到大的顺序排列。有题目可知,数组是由小到大排列的,所以我们可以将一个指针设置在index 为0时,另外一个设置在数组的末尾。
2023-06-29 16:03:21
75
原创 6.28 代码随想录训练营第一天 | 数组题目练习:704 二分查找,27移除元素
这两种方式的不同之处主要体现在target所在的区间之中,一个是在[left, right] 之中此时while语句里的条件为(left <= right),当更新right的时候 r = mid - 1。是一道非常经典的题目二分搜索,它的逻辑很简单就是从数组的中间开始,然后要找的数相比,如果中间的数比要找的大那么就向数组的左边移动,如果中间的数比要找的数小就要往数组的右边移动。但是实现二分搜索的首要条件就是这个数组是一个有序数组是从小到大排列的,并且数组中没有重复的元素, 否则就实现不了。
2023-06-28 17:21:53
301
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人