- 博客(70)
- 收藏
- 关注
原创 关于树的常用知识点和常见的特殊二叉树
如下图为2-3树,是最简单的B树,2节点包含1个键值和2子节点,3节点包含2个键值和3子节点。是B树的一种变体,也是一种多路搜索树,其所有的键值都出现在 叶子结点的链表中,且链表中的键值也是有序的,非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(键值)数据的数据层。只有度为0的结点和度为2的结点,并且度为0的结点在同一层上。B*树是 B+树的变体,在 B+树的非根和非叶子结点再增加指向兄弟的指针。对于根节点,左子树中所有节点的值<根节点的值<右子树中所有节点的值。给定N个权值作为N个。
2024-10-27 17:07:47 409
原创 力扣 中等 740.删除并获得点数
由题意可知,在选择了数组中元素 a 后,该元素以及所有等于 a−1 和 a+1 的元素都会从数组中删去,并获得 a 的点数。若还有多个值为 a的元素,由于所有等于 a−1 或 a+1 的元素已经被删除,我们可以直接删除 a并获得其点数。因此若选择了 a,所有等于 a 的元素也应一同被选择,才可以尽可能多地获得点数。记元素 a 在数组中出现的次数为 Ca ,我们可以用一个数组 sum 记录数组 nums 中所有相同元素之和,即 sum[a]=x⋅Ca。
2024-10-27 15:16:18 795
原创 力扣 中等 2466.统计构造好字符串的方案数
题意:每次可以爬zero或one个台阶,返回爬low到high个台阶的方案数。和上题337.组合总和(链接)的思路一样,只不过是将可以爬的台阶数从数组换成了两个数(zero和one)// dp[i] 表示构造长为 i 的字符串的方案数dp[0] = 1;// 构造空串的方案数为 1i <= high;简化代码:将两个for循环合并成一个// dp[i] 表示构造长为 i 的字符串的方案数。
2024-10-26 12:23:33 340
原创 力扣 中等 377.组合总和
本质是爬楼梯,相当于每次往上爬 nums[i]步本题和爬楼梯是一个思路,只不过我们每次从 nums 中选一个数,作为往上爬的台阶数,问爬 target 个台阶有多少种方案。爬楼梯那题可以看作 nums=[1,2],因为每次只能爬 1 个或 2 个台阶。dp[0] = 1;// 参考爬楼梯i++) {
2024-10-26 09:51:22 432
原创 力扣 中等 198.打家劫舍
法一:动态规划 和716最少花费爬楼梯思路一样链接确定dp数组(dp table)以及下标的含义:dp[i]的定义为到第i号房屋能偷窃到的最高金额为dp[i]确定递推公式:可以有两个途径得到dp[i],一个是dp[i-1] 一个是dp[i-2]。所以 dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1])dp数组如何初始化:dp[0] = nums[0];确定遍历顺序举例推导dp数组// nums.length是大于等于1的。
2024-10-25 13:33:57 470
原创 力扣周赛第420场 中等 3325.字符至少出现k次的子字符串 I
滑动窗口思想:参考 3.无重复字符的最长子串链接left < n;left++){// 记录窗口内字符出现的次数// 右指针从左指针的位置向右开始移动right < n;right++){// 当窗口内某个字符出现的次数>=k时,满足题目要求// 右指针从该位置到字符串末尾也都满足题目要求,个数为 n - right 个break;return res;
2024-10-24 21:27:21 370
原创 力扣 简单 111.二叉树的最小深度
最小深度:从根节点到最近叶子结点的最短路径上节点数量。当前节点为空,则返回当前节点minDepth=0;当前节点左右子树都存在,则返回当前节点minDepth= 左右子树最小深度的最小值 +1;当前节点的左右子树其中一个不存在,则返回当前节点minDepth= 左右子树最小深度的最大值 +1;return 0;
2024-10-24 08:57:13 449
原创 力扣 简单 746.使用最小花费爬楼梯
确定dp数组以及下标的含义:dp[i]的定义为到达第i台阶所花费的最少体力。确定递推公式:可以有两个途径得到dp[i],一个是dp[i-1] 一个是dp[i-2]。dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])。
2024-10-23 21:00:03 369
原创 力扣 简单 70.爬楼梯
确定dp数组以及下标的含义:dp[i]: 爬到第i层楼梯,有dp[i]种方法确定递推公式:从dp[i]的定义可以看出,dp[i] 可以有两个方向推出来。首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么。还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,那么再一步跳两个台阶不就是dp[i]了么。所以dp数组初始化:dp[1] = 1,dp[2] = 2。
2024-10-23 20:58:16 704
原创 力扣 困难 52.N皇后II
法一:返回51题N皇后List的长度this.n = n;dfs(0);return ans;ans++;// 找到一个合法方案return;c < n;c++) {if (!dfs(r + 1);// 恢复现场。
2024-10-22 22:03:51 539
原创 力扣 困难 51.N皇后
如果只有不同行不同列的要求,那么此题和上一题全排列的题解法是一样的。题目还要求不能同一斜线:因为是从上到下进行枚举,所以只需要看右上方向和左上方向有没有皇后就可以int[] col;// 记录皇后的位置,第i行皇后在第col[i]列// 判断某列是否有皇后// 判断右上方向是否有皇后// 判断左上方向是否有皇后dfs(0, n);return ans;// 从第 r = 0行开始逐行递归return;c < n;c++) {if (!col[r] = c;
2024-10-22 22:02:39 401
原创 力扣 中等 143.重排链表
/ 876. 链表的中间结点= null) {// 206. 反转链表while (cur!cur = nxt;return pre;
2024-10-19 11:30:01 246
原创 力扣 简单 141.环形链表
思路:慢指针每次循环走一步,快指针每次走两步,快指针相对于慢指针每次多走一步(相对速度),如果有环的话,一步一步走肯定能遇到慢指针。= null) {
2024-10-18 10:33:09 494
原创 力扣 简单 83.删除排序链表中的重复元素
法一:带dummy node//根据提示,val的值在-100~100,如果括号里面不填则默认dummy.val=0,可能会和某些测试用例的val一样导致出错= null){}else{法二:不带dummy node本题的头结点不会被删除或修改,所以不需要dummy也可以,只需要判断一下head是否为空即可= null){}else{
2024-10-17 11:23:06 317
原创 力扣 中等 19.删除链表的倒数第N个结点
法一:前后指针思路:让前面的指针先移动 n 步,之后前后指针共同移动(左右指针的距离始终为n),直到前面的指针到尾部,此时前指针移动到了要删除节点的前一个节点// 由于可能会删除链表头部,用哨兵节点简化代码// 右指针先向右走 n 步= null) {// 左右指针一起走// 左指针的下一个节点就是倒数第 n 个节点法二:暴力方法先遍历整个链表得到链表长度l,再从头开始移动指针l-n-1次,移动到要删除节点的前一个节点++i) {return ans;
2024-10-16 21:44:46 401
原创 力扣 中等 46.全排列
/ 存放符合条件结果的集合// 用来存放符合条件结果// 标记数组,记录数字是否被使用过dfs(nums);return res;return;// 回溯,撤销选择并从路径中移除当前数字。
2024-10-08 17:29:27 524
原创 力扣 中等 39.组合总和
是216组合总和III链接的扩展return res;return;i++) {// 关键点:不用i+1了,表示可以重复读取当前的数。
2024-10-07 17:32:18 427
原创 力扣 中等 78.子集
有两种解法,对于计算[1,2]的子集问题:站在输入的角度思考:每个元素都可以选/不选代码如下:解法二:站在答案的角度思考代码如下:参考b站灵茶山艾府
2024-10-06 09:37:39 650
原创 力扣 简单 110.平衡二叉树
平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1//利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1}else {//以节点为根节点的树的最大深度return 0;} else {
2024-10-05 21:38:41 351
原创 目标检测 DAB-DETR(2022)
本文认为原始的Detr系列论文中:可学习的object queries仅仅是给model预测box提供了锚点(中心点)信息,却没有提供box的宽和高信息。于是本文考虑引入可学习的动态锚框来使model能够适配不同尺寸的物体,深刻地揭示了 Decoder query 的具体意义,并加速网络的收敛。
2024-10-05 10:07:09 1046
原创 力扣 简单 101.对称二叉树
在上题【100. 相同的树】的基础上稍加改动,将根节点的左右子树看成左右两个树递归判断左边的右子树和右边的左子树以及左边的左子树和右边的右子树是否都相同// 必须都是 null才返回true。
2024-10-04 17:25:39 458
原创 力扣 中等 129.求根节点到叶子结点数字之和
法一:有返回值、return 0;if (root.left == root.right) { // root 是叶子节点return x;法二:无返回值return ans;return;if (node.left == node.right) { // node 是叶子节点ans += x;return;
2024-10-03 21:46:55 281
原创 目标检测 Deformable DETR(2021)详细解读
为解决DETR attention的计算量大导致收敛速度慢、小目标检测效果差的问题:提出了,其注意力模块只关注一个query周围的少量关键采样点集,采样点的位置并非固定,而是可学习的(如左图所示,DETR的query要和其他所有的key计算相似度计算量为token的平方, 而Deformable DETR只关注周围少量的key,大大减少了计算量,提高了收敛速度),并采用了多尺度策略提高了小物体的检测性能。
2024-10-03 11:33:26 1730
原创 目标检测 DETR(2020)
DETR全称是Detection Transformer,是首个基于Transformer的端到端目标检测网络,最大的特点就是不需要预定义的先验anchor,也不需要NMS的后处理策略(少了这两部分可以少很多的超参数和计算),用集合的思想回归出100个query之后再用匈牙利算法二分图匹配的方式得到最终的正样本和负样本,第一个实现了端到端的目标检测。
2024-09-29 13:11:58 1342
原创 力扣 简单 112.路径总和
/ 只在最开始的时候判断树是否为空if (root.left == null && root.right == null) { // root 是叶子节点。
2024-09-28 10:56:13 323
原创 力扣 简单 104.二叉树的最大深度
如果知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为max(l,r)+1,而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用递归的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。return 0;
2024-09-28 10:51:16 361
原创 力扣 中等 445.两数相加 II
首先反转两个链表,再调用 2. 两数相加链接的代码,得到链表,最后将其翻转即可。// l1 和 l2 反转后,就变成【2. 两数相加】了// 翻转链表while (cur!cur = nxt;return pre;// 哨兵节点// 进位while (l1!= 0) { // 有一个不是空节点,或者还有进位,就继续迭代if (l1!// 节点值和进位加在一起if (l2!// 节点值和进位加在一起// 每个节点保存一个数位。
2024-09-26 11:37:46 401
原创 力扣 中等 24.两两交换链表中的节点
利用25题K个一组反转链表链接,将k改为2即可。// 同 25题 K个一组反转链表// 统计节点个数int n = 0;cur!= null;n++;// 2 个一组处理for (;n >= 2;cur = nxt;p0 = nxt;
2024-09-26 11:35:52 270
原创 力扣 困难 25.K个一组反转链表
先把链表的长度求出来,翻转前先判断剩余链表节点的个数,如果大于等于k则翻转,否则直接退出循环返回,每一个小组的翻转和上一题一样。参考b站灵茶山艾府// 统计节点个数int n = 0;cur!= null;n++;// k 个一组处理for (;n >= k;i++) { // 同 92 题pre = cur;cur = nxt;p0 = nxt;推荐博客文章力扣反转链表系列【25. K 个一组翻转链表】——由易到难,一次刷通!!!
2024-09-25 21:32:12 711
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人