- 博客(32)
- 收藏
- 关注
原创 代码随想录算法训练营Day29
没有利用到sum参数,直接把target值减去加进来的数值即可。index + 1 表示 任意顺序即可,i+1 表示进入下一层。
2023-09-24 00:29:02
102
原创 代码随想录算法训练营Day27
这个也可以剪枝,通过将 i <= 9 改为 i <= 9 - (path.size() - k) +1。实际跟上一题做法相似。
2023-09-19 13:43:26
78
原创 代码随想录算法训练营Day16
对于二叉树的所有路径中的每条路径,当遍历到叶子节点的时候为当前路径的结束。并且将当前路径加入结果集。在本题同样也是这个顺序:将根节点加入路径,递归左子树,递归右子树。前序遍历的顺序是:根节点、左子树、右子树。对于左子树和右子树来说,也都是同样的操作。
2023-08-31 21:05:01
46
1
原创 代码随想录算法训练营Day15
因为计算深度时,没算上根节点,所以最后要+1;终止条件 节点等于null。终止条件 节点为null。节点为空的情况有:(
2023-08-30 15:25:43
34
1
原创 代码随想录算法训练营Day14
根据做题发现后面pre.next=null可以省略,但省略后不好理解。Integer.MAX_VALUE为int类型最大值。116规定完整二叉树,117没规定,但其实做法是一样的。Integer.MIN_VALUE为int类型最小值。
2023-08-29 13:30:47
23
原创 代码随想录算法训练营Day13
层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。在for循环里的话可能影响到que.size()的值。一个节点有多个孩子而已。
2023-08-28 19:45:38
40
1
原创 代码随想录算法训练营Day10
第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false通过栈来比较,代码用的是碰到左括号,存右括号,当然也可以用碰到左括号,存左括号。
2023-08-25 19:12:09
58
1
原创 代码随想录算法训练营Day8
如果len % (len - (next[len - 1] + 1)) == 0 ,则说明数组的长度正好可以被 (数组长度-最长相等前后缀的长度) 整除 ,说明该字符串有重复的子字符串。没有使用kmp,推测needle含有haystack的子字符串,减去重复的,然后从头开始遍历两个数组是否。如果s存在重复子字符串,则next[len]肯定找到前序重复的,所有>0,存在重复子字符串,如果b直接到m就说明遍历结束。列表遍历拼接,也可以使用String,方法一样。
2023-08-23 21:55:36
29
原创 代码随想录算法训练营Day7
数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后再从后向前进行操作。另一个当字符少于k个 则全部反转,大于k小于2k,反转前k个。则属性r有区分,当大于k个执行后者,小于k个执行前者。最后的单词还有一个空格,需要再去一次前后空格。一个条件是每2k个字符就前k个字符反转,好处:不用申请新的数组,不需要直到长度。要先去除字符串前、内部、末尾的多余空格。采用双指针法,由两头向中间靠近。重点思考:r的属性分配。
2023-08-21 23:05:16
37
1
原创 代码随想录算法训练营Day6
用一个长度为26的数组还记录magazine里字母出现的次数,然后再用ransomNote去验证这个数组是否包含了ransomNote所需要的所有字母。在遍历C和D数组,如果找到 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。首先定义 一个Hashmap,key放a和b两数之和,value 放a和b两数之和出现的次数。遍历A和B数组,统计两个数组元素之和key,和出现的次数value,放到map中。需要注意的是去重逻辑与操作。
2023-08-20 22:41:45
33
1
原创 代码随想录算法训练营Day5
思路:数组就是一个简单的哈希表,映射的是26个字母在字符串中出现的次数,s串时+1,t串时-1,最后判断数组是否为0即可。我们不仅要知道元素有没有遍历过,还有知道这个元素对应的下标,该题的核心是判断sum是否重复出现。注意取一个数的各个位置上的数值的操作。为 {key:数据元素,value:数组元素对应的下表}一个集合来存放我们遍历过的元素,然后在遍历数组的时候去。1.为什么用HashMap,可以保存数组元素和位置,通过两个循环遍历每一个元素,找到符合条件的答案。哈希法(时间复杂度为 O(1)
2023-08-19 17:07:17
109
原创 代码随想录算法训练营Day4
时间复杂度 O(N) :第二次相遇中,慢指针须走步数 x第一次相遇中,慢指针须走步数 x+y,其中 x为双指针重合点与环入口距离;如果是奇数节点,那么cur.next.next=null则结束,cur.next不作交换。x=z,所以后面又取头节点,然后再移动节点,直到相遇则是入口节点。若是偶数节点,则cur.next=null结束。当他们在同一位置上移动时,则可以找到是否右节点它们相同。空间复杂度 O(1) :双指针使用常数大小的额外空间。要思考清楚谁先谁后。光看题是有点抽象,很难想到何时达到入口节点。
2023-08-18 22:42:28
36
1
原创 代码随想录算法训练营day2
其中为什么是while(sum >= target)因为容易存在target=101,nums=[1,1,1,1,100]的数组问题,看到题目想考虑双指针,数组其实是有序的, 只不过负数平方之后可能成为最大数了。坚持循环不变量原则,每条边都坚持左闭右开,这样一圈下来才能按照统一规则画下来。数组主要还是双指针算法,考虑边界问题还有条件的问题,这道题不是快慢指针的形式,而是头尾指针向中间夹逼,如果是if则无法解决此问题,所以用while。所以循环条件与之前不同。
2023-08-17 21:47:07
33
1
原创 代码随想录算法训练营day1
二分法同时涉及了很多关于边界的条件,因此区间分为两种左闭右闭[left,right]和左闭右开[left,right)第二种边界为[left, right)使用条件:1.有序数组,2.无重复。主要有时候边界问题没有判断清楚,
2023-08-17 21:25:14
43
1
原创 代码随想录 第三天
这道题,需要记住设置一个虚拟头指针,然后用虚拟头指针遍历链表,(务必不能使用head遍历,如果用了,则改变了head节点值,影响后续操作),因此需要利用其他指针获取head节点,来进行操作。因为cur节点此时的next已经是pre节点,不是原先的数,所以不可以取cur.next。2.关键: 不能利用head节点遍历链表,还是要用其他指针取head节点。上学期刚学完数据结构,印象还是有点的,做起来也没想象的难。java比c++设置链表简单,不需要考虑释放节点。1.注意边界问题,这个方面还是不太行。
2023-08-17 20:42:26
23
空空如也
c读取txt到结构体数组,结果输出全为0
2023-05-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人