
算法
文章平均质量分 96
ByteKun&
学习 linux 中。。。
展开
-
【算法篇】图论类(1)(笔记)
如果想 表示 无向图,即:grid[2][5] = 6,grid[5][2] = 6,表示 节点 2 与 节点 5 相互连通,权值为6。用一个方格地图,假如每次搜索的方向为 上下左右(不包含斜上方),那么给出一个start起始位置,那么BFS就是从四个方向走出第一步。grid[2][5] = 6,表示 节点 2 连接 节点 5 为 有向图,节点 2 指向 节点 5,边的 权值为 6。然后我们再去遍历这个地图,遇到有陆地的地方,去采用深搜或者广搜,边统计所有陆地。100. 岛屿的最大面积。原创 2024-10-29 17:21:48 · 1003 阅读 · 0 评论 -
【算法篇】贪心类(2)(笔记)
目录一、Leetcode 题目 1. 柠檬水找零2. 根据身高重建队列3. 用最少数量的箭引爆气球4. 无重叠区间5. 划分字母区间6. 合并区间7. 单调递增的数字8. 监控二叉树二、总结https://leetcode.cn/problems/lemonade-change/description/https://leetcode.cn/problems/lemonade-change/description/2. 根据身高重建队列https://leetcode.cn/proble原创 2024-10-22 18:25:29 · 633 阅读 · 0 评论 -
【算法篇】贪心类(1)(笔记)
你能获得的 最大 利润。原创 2024-10-17 18:30:29 · 858 阅读 · 0 评论 -
【算法篇】动态规划类(4)——子序列(笔记)
目录一、Leetcode 题目 1. 最长递增子序列2. 最长连续递增序列3. 最长重复子数组4. 最长公共子序列5. 不相交的线6. 最大子序和7. 判断子序列8. 不同的子序列9. 两个字符串的删除操作10. 编辑距离11. 回文子串12. 最长回文子序列二、动态规划总结https://leetcode.cn/problems/longest-increasing-subsequence/description/https://leetcode.cn/problems/longest-increasin原创 2024-10-16 18:57:15 · 1237 阅读 · 0 评论 -
【算法篇】动态规划类(3)——打家劫舍+股票(笔记)
在不触动警报的情况下 ,小偷能够盗取的最高金额。你能获得的 最大 利润。原创 2024-10-16 01:20:01 · 420 阅读 · 0 评论 -
【算法篇】动态规划类(2)——01背包+完全背包(笔记)
有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x!= y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回0。原创 2024-10-13 17:46:47 · 1259 阅读 · 0 评论 -
【算法篇】动态规划类(1)(笔记)
动态规划,英文:Dynamic Programming,简称 DP,如果 某一问题有很 多重叠子问题,使用动态规划 是最有效的。dp[i] 的定义为:第 i 个数的 斐波那契数值是 dp[i]。有dp[i]种方法。原创 2024-10-12 18:05:38 · 1172 阅读 · 0 评论 -
【算法篇】回溯算法类(2)(笔记)
其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中。,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。,按任意顺序 返回所有不重复的全排列。原创 2024-10-03 18:55:28 · 1244 阅读 · 0 评论 -
【算法篇】回溯算法类(1)(笔记)
的字符串,返回所有它能表示的字母组合。返回该数组所有可能的子集(幂集)。返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。如果至少一个数字的被选数量不同,则两种组合是不同的。,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在。的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。注意:解集不能包含重复的组合。你可以按 任何 顺序返回答案。你可以按 任何顺序 返回答案。中的每个数字在每个组合中只能使用 一次。原创 2024-10-02 17:12:08 · 851 阅读 · 0 评论 -
【算法篇】二叉树类(3)(笔记)
t=O83At=O83At=O83At=O83At=O83At=O83At=O83A236. 二叉树的最近公共祖先 - 力扣(LeetCode)https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/原创 2024-09-28 16:51:05 · 959 阅读 · 0 评论 -
【算法篇】二叉树类(2)(笔记)
递归:因为是传入了两个树,那么就有两个树遍历的节点root1 和 root2,如果root1 == NULL 了,两个树合并就应该是 root2 了(如果root2也为NULL也无所谓,合并之后就是NULL)。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;频率count 大于 maxCount的时候,不仅要更新 maxCount(要把这个元素加入到结果集中),而且要清空结果集(以下代码为result数组),因为结果集之前的元素都失效了。返回以该节点为根的子树。原创 2024-09-27 17:08:54 · 902 阅读 · 0 评论 -
【算法篇】二叉树类(1)(笔记)
int val;原创 2024-09-26 18:13:36 · 1163 阅读 · 0 评论 -
【算法篇】栈与队列类(笔记)
队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。push(value):如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止。第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号 return false。要用小顶堆,因为要统计最大前k个元素,只有小顶堆每次将最小的元素弹出,最后小顶堆里积累的才是前k个最大元素。原创 2024-09-19 17:28:15 · 1230 阅读 · 0 评论 -
【算法篇】字符串类(笔记)
也就是: 12(字符串的长度) - 8(最长公共前后缀的长度) = 4, 为最长相同前后缀不包含的 子串长度。4 可以被 12(字符串的长度) 整除,所以说明有重复的子字符串(asdf)。给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。可以跳转 代码随想录 的网站。原创 2024-09-17 16:48:22 · 1211 阅读 · 0 评论 -
【算法篇】哈希类(笔记)
在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。的 双指针解法 是 两层 for 循环 nums[k] + nums[i] 为确定值,依然是循环内有 left 和 right 下标作为 双指针,找出 nums[k] + nums[i] + nums[left] + nums[right] == target的情况。题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现。原创 2024-09-15 15:54:31 · 825 阅读 · 0 评论 -
【算法篇】链表类(笔记)
求出两个链表的长度,并求出两个链表长度的 差值,然后让 curA 移动到,和 curB 末尾对齐的 位置。可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指 针 每次移动 两个节点,slow 指针 每次移动 一个节点,如果 fast 和 slow指针在途中 相遇 ,说明这个 链表有环。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。,n 为 fast 指针在环内走了 n 圈 才遇到 slow 指针, (y+z)为 一圈内节点的个数 A。原创 2024-09-12 17:29:55 · 996 阅读 · 0 评论 -
【算法篇】数组类(笔记)
if (nums[middle] > target) right 更新为 middle,因为当前 nums[middle] 不等于 target,去 左区间 继续寻找,而寻找 区间是 左闭右开区间,所以 right 更新为 middle,即:下一个 查询区间不会去比较 nums[middle]。一个 for 循环滑动窗口的 起始位置,一个 for 循环为滑动窗口的终止位置,用两个 for 循环 完成了一个不断搜索区间的过程。:窗口的结束位置就是遍历数组的指针,也就是 for 循环里的索引。原创 2024-09-10 17:39:34 · 865 阅读 · 0 评论