算法题目分类
文章平均质量分 70
算法题目分类
消失的dk
永远不要低估一颗总冠军的心
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构---前缀和
但如果 targetSum=0,假设根节点值为 1,如果先把 cnt[1] 增加 1,再把 ans 增加 cnt[s−targetSum]=cnt[1]=1,就相当于我们找到了一条和为 targetSum=0 的路径,但和为 0 的路径是不存在的。也可以这样理解,要想把任意路径和都表示成两个前缀和的差,必须添加一个 0,否则当路径是前缀时(从根节点开始的路径),没法减去一个数,具体见 前缀和及其扩展 中的讲解。答:如果不恢复现场,当我们递归完左子树,要递归右子树时,cnt 中还保存着左子树的数据。原创 2025-02-01 15:16:26 · 456 阅读 · 0 评论 -
数据结构---栈
Stack:java里Stack的peek方法是返回栈顶的元素但不移除它。但Stack的pop方法是会移除的。原创 2025-01-20 11:07:50 · 258 阅读 · 0 评论 -
算法---滑动窗口
3、此时,我们停止增加right,转而不断增加left指针缩小窗口[left,right),直到窗口中的字符串不再符合要求(不包含T中的所有字符了)。同时,每次增加left,我们都要更新一轮结果。1、我们在字符串S中使用双指针中的左右指针技巧,初始化left=right=0,把索引左闭右开区间[left,right)称为一个「窗口」。2、我们先不断地增加right指针扩大窗口[left,right),直到窗口中的字符串符合要求(包含了T中的所有字符)。原创 2025-01-19 23:42:59 · 389 阅读 · 0 评论 -
算法---贪心算法
我们可以「贪心」地选择距离最后一个位置最远的那个位置,也就是对应下标最小的那个位置。因此,我们可以从左到右遍历数组,选择第一个满足要求的位置。在具体的实现中,我们维护当前能够到达的最大下标位置,记为边界。我们从左到右遍历数组,到达边界时,更新边界并将跳跃次数增加1。找到最后一步跳跃前所在的位置之后,我们继续贪心地寻找倒数第二步跳跃前所在的位置,以此类推,直到找到数组的开始位置。贪心问题:想清楚局部最优是什么,如何推导出全局最优。原创 2025-01-20 11:10:51 · 268 阅读 · 0 评论 -
数据结构---二叉树
intval;原创 2025-01-20 11:38:17 · 633 阅读 · 0 评论 -
算法---动态规划
当前节点选择不偷:当前节点能偷到的最大钱数=左孩子能偷到的钱+右孩子能偷到的钱当前节点选择偷:当前节点能偷到的最大钱数=左孩子选择自己不偷时能得到的钱+右孩子选择不偷时能得到的钱+当前节点的钱数。原创 2025-01-20 11:59:58 · 2560 阅读 · 0 评论 -
算法---双指针(数组+链表)
若向内移动短板,水槽的短板min(h[i],h[j])可能变大,因此下个水槽的面积可能增大。若向内移动长板,水槽的短板min(h[i],h[j])不变或变小,因此下个水槽的面积一定变小。因此,初始化双指针分列水槽左右两端,循环每轮将短板向内移动一格,并更新面积最大值,直到两指针相遇时跳出;注:快慢指针,快指针如果遇到要保留的元素,就给slow指针。注意:此题采用暴力解法会超时,应该使用双指针,原创 2025-01-19 23:37:29 · 286 阅读 · 0 评论
分享