- 博客(30)
- 收藏
- 关注
原创 算法训练营 Day 29
1、两个数组之差的总和必须大于等于0,否则不能完成绕行 2、 一个站的收益如果小于0,肯定不能作为起点;而连续的多个站也可以等效地看做一个站,如果其累积收益小于0,就跳过,寻找下一个。注意这里对绝对值进行排序,而不是直接进行排序。贪心解法,可以认为是使用了经验公式。这里的边界条件有点麻烦。先确定一边,再确定另一边。
2024-06-12 15:21:37 234
原创 算法训练营 Day 28
题目假设总是可以到达数组的最后一个位置优化,也就是说,除非传入的数组长度为1,那么输出的ans为0,否则输出的ans一定大于0。所以可以据此进行优化。
2024-06-08 12:37:10 268
原创 算法训练营 Day 25
对于排列问题,树层上去重和树枝上去重,都是可以的,但是树层上去重效率更高!都能干,但如果数值范围小的话能用数组尽量用数组。由于这道题不能提前排序,所以要使用。可以发现效率提升了很多,所以数组,都可以做哈希表,而且数组干的活,还可以用数组进行优化。
2024-06-05 17:04:08 125
原创 算法训练营 Day 20
二叉树的遍历顺序除了有前序遍历(中左右)、中序遍历(左中右)、后序遍历(左右中)外,还有三种,分别为反前序遍历(右左中)、反中序遍历(右中左)、反后序遍历(中右左)。这题可以用反中序遍历。迭代法,思路是一样的,也是使用反中序遍历。迭代法,很麻烦,代码可读性很差。迭代法,思路是一样的。
2024-05-30 18:56:50 153
原创 算法训练营 Day 19
插入的值可以直接充当二叉搜索树的叶子结点,这样就可以简化这道题的解法。递归也可以没有返回值,这里策略是一样的,都是让 新插入的节点作为叶子节点。可以直接使用 二叉树的最近公共祖先 的题解,但是效率较低。迭代法,逻辑是一样的。
2024-05-30 02:34:55 328
原创 算法训练营 Day 18
本题是二叉搜索树,所以可以利用二叉搜索树的性质,进行简化。本题使用了递归的回溯,因此不适合使用迭代法去求解。如果是一般二叉树,可以这么做。其实主体部分还是一样的。
2024-05-28 17:22:16 371
原创 算法训练营 Day 17
中序递归和后序递归只用改变中、左、右三条语句的顺序就可以了。实践证明,指针才是最快的,也是最不好理解的。注意二叉搜索树中不能存在数值相同的结点。,所以结合本题数值范围,最好用。
2024-05-27 16:09:30 233
原创 算法训练营 Day 15
树的深度和结点的深度一定要区分开,树的深度是这棵树所有结点的深度的最大值;同理树的高度也要和结点的高度区分开,数的高度是这棵树所有结点的高度的最大值。树的深度和树的高度是相等的,但这棵树上一个结点的高度。为整棵树的高度或深度加一。后序递归:(后序的威力)
2024-05-26 00:35:22 394
原创 算法训练营 Day 12
二叉树的统一迭代法,方法是在把所有结点都放入栈中,同时在要处理的结点后加一个空结点(一个标记),方便将对应结点放入结果集。先来前序遍历:(其他部分代码一样)统一迭代法——中序遍历。统一迭代法——前序遍历。统一迭代法——后序遍历。
2024-05-22 22:17:05 140 1
原创 算法训练营 Day 3
1、移除链表元素第一种方法,使用不带虚你头结点的链表class Solution {public: ListNode* removeElements(ListNode* head, int val) { // 删除头结点 while (head != nullptr && head->val == val) { ListNode* tmp = head; head = head->nex
2024-05-13 11:20:58 437 1
原创 算法训练营Day 2
第一种方法,直接调用库函数。第一种方法,利用循环直接做。第二种方法,也可以利用递归。第二种方法,利用双指针。第一种方法,暴力解法。第二种解法,滑动窗口。
2024-05-12 19:42:57 277
原创 算法训练营Day 1
第一种方法(左闭右闭),利用递归。变量定义要遵循最小作用域原则。第二种方法(左闭右闭),利用。第三种方法(左闭右开),利用。第一种方法,直接利用库函数。第三种方法,利用双指针。第二种方法,暴力实现。
2024-05-10 18:27:42 243 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人