[go: up one dir, main page]

自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 目标检测 DETR(2020)

DETR全称是Detection Transformer,是首个基于Transformer的端到端目标检测网络,最大的特点就是不需要预定义的先验anchor,也不需要NMS的后处理策略(少了这两部分可以少很多的超参数和计算),用集合的思想回归出100个query之后再用匈牙利算法二分图匹配的方式得到最终的正样本和负样本,第一个实现了端到端的目标检测。

2024-09-29 13:11:58 749

原创 力扣 简单 112.路径总和

/ 只在最开始的时候判断树是否为空if (root.left == null && root.right == null) { // root 是叶子节点。

2024-09-28 10:56:13 219

原创 力扣 简单 111.二叉树的最小深度

最小深度:从根节点到最近叶子结点的最短路径上节点数量return 0;// 如果 node 没有右儿子,那么最小深度就是左子树的最小深度加一// 如果 node 左右子树都有。

2024-09-28 10:53:09 185

原创 力扣 简单 104.二叉树的最大深度

如果知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为max(l,r)+1,而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用递归的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。return 0;

2024-09-28 10:51:16 130

原创 力扣 中等 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 354

原创 力扣 中等 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 216

原创 力扣 简单 876.链表的中间结点

int n = 0;while (cur!i < n / 2;i++) {法二:快慢指针break;

2024-09-26 11:33:13 232

原创 力扣 困难 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 656

原创 力扣 中等 275.H指数

h指数不一定都满足citations[mid] == n - mid,例如[0,1,4,5,6]的h指数是3。题目说了用对数时间复杂度来实现,说明一定是用二分法,草纸上推导一下即可得出以下代码。}else{

2024-09-25 21:12:06 407

原创 力扣 中等 92.反转链表 II

/ 创建一个哑节点,它的 next 指向头节点,方便处理// p0 用于指向反转部分的前一个节点// 移动 p0 到反转部分的前一个节点i++) {// 执行反转i++) {pre = cur;cur = next;// 反转完之后,cur 指向需要反转部分的下一个节点// pre指向需要反转部分的最后一个节点// 此时 p0.next 还和原来一样,指向未反转时需要反转的第一个节点// 返回哑节点的下一个节点,即头节点。

2024-09-24 21:15:37 476

原创 力扣 简单 206.反转链表

法一:双指针在遍历链表时,将当前节点的 next 改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。while (cur!cur = nxt;return pre;法二:递归/*** int val;* }*/

2024-09-24 20:39:49 459

原创 力扣 困难 154.寻找旋转排序数组中的最小值 II

153.寻找旋转排序数组中的最小值在此基础上,进行二分之前,单独处理一下左指针和最后一个数相同的情况就好了。left++;} else {

2024-09-23 11:27:55 497

原创 力扣 中等 1901.寻找峰值II

需要明白一个事实:从任意一个点出发,可以经过一个递增路径,找到一个极大值点。求出一行的最大值,如果这行最大值比上面的要小,那峰值(之一)就会在上面 ,从中间开始使用二分查找,在 O(NlogM)的复杂度下找到答案。// 该行的最大值j// 峰顶行号 i// 找到该行最大值的下标i++) {idx = i;return idx;

2024-09-23 11:23:49 386

原创 力扣中等 33.搜索旋转排序数组

首先用 153. 寻找旋转排序数组中的最小值 的方法,找到 nums 的最小值的下标 i。然后分类讨论:如果 target>nums[n−1],在 [0,i−1] 中二分查找 target。如果 target≤nums[n−1],那么:如果 i=0,说明 nums 是递增的,直接在 [0,n−1] 中二分查找 target。如果 i>0,那么 target 一定在第二段 [i,n−1] 中,在 [i,n−1] 中二分查找 target。

2024-09-21 17:14:45 318

原创 力扣中等 153.寻找旋转排序数组中的最小值

正解:可以和数组最后一个数比较,来判定二分的位置是在最小值的左侧还是在最小值的右侧。在0到n-2二分,如果nums[mid] > nums[n - 1],则mid在最小值的左侧,mid和其左侧染成红色;如果nums[mid] < nums[n - 1],则mid要么是最小值要么在最小值的右侧,染成蓝色,所以二分结束后,最左边的蓝色就是答案。// 闭区间 [0, nums.length - 2]} else {

2024-09-21 17:13:14 532

原创 力扣 中等 162.寻找峰值

定理:如果in−1 且numsi]<numsi+1],那么在下标 [i+1,n−1] 中一定存在至少一个峰值。证明思路分析:利用采用红蓝染色题体法,n为数组的长度,开始左指针L指向数组最左边,右指针R指向n-2(为了让最后得到的L不越界,如nums是递增数列)如果nums[M] < nums[M+1] ,说明M在峰顶的左侧,则M和其左侧的元素都为红色;

2024-09-20 11:10:32 369

原创 力扣 中等 2300.咒语和药水的成功对数

i < n;

2024-09-20 11:02:32 222

原创 力扣2563.统计公平数对的数目

红蓝染色体法i++){// >= lower-nums[i] 的位置// <= upper-nums[j]的位置return res;} else {

2024-09-19 10:45:51 393

原创 力扣 2529.正整数和负整数的最大计数

采用红蓝染色体法,具体介绍参考红蓝染色体法通过红蓝染色体法可以找到第一个大于大于target的位置,使所以本题可以找第一个大于0的位置,即负整数的个数;数组长度 - 第一个大于1的位置即正整数的个数。} else {

2024-09-19 10:41:55 430

原创 力扣 42.接雨水

法一:通过计算每个位置 i 能够捕获的雨水量,然后将他们相加。preMax和sufMax分别用来存储每个位置左边和右边的最大高度,则每个位置 i 可以捕获的雨水量为:Math.min(preMax[i], sufMax[i]) - height[i]// preMax[i] 表示从 height[0] 到 height[i] 的最大值i < n;i++) {// sufMax[i] 表示从 height[i] 到 height[n-1] 的最大值i >= 0;

2024-09-18 16:45:50 474

原创 力扣 11.盛最多水的容器

/ height[left] 与右边的任意线段都无法组成一个比 ans 更大的面积left++;} else {// height[right] 与左边的任意线段都无法组成一个比 ans 更大的面积right--;return ans;

2024-09-18 16:44:37 359

原创 力扣 611.有效三角形的个数

有效三角形:两个短边和大于最长边思路:将数组从小到大进行排序,外层循环从后向前进行遍历作为最长边,内层循环用相向双指针 l 和 r 分别代表两个短边,通过比较两个短边和 和最长边的大小关系来移动相向双指针。i > 1;i--){// 和2824题 统计小于目标的小标对数目 解法一样r--;}else{l++;return res;

2024-09-18 16:43:33 597

原创 力扣 18.四数之和

思路和 15. 三数之和 一样,排序后,枚举 nums[a] 作为第一个数,枚举 nums[b] 作为第二个数,那么问题变成找到另外两个数,使得这四个数的和等于 target,这可以用双指针解决。a < n - 3;a++) { // 枚举第一个数// 跳过重复数字b < n - 2;b++) { // 枚举第二个数// 跳过重复数字while (l < r) { // 双指针枚举第三个数和第四个数。

2024-09-16 20:42:13 294

原创 力扣 16.最接近的三数之和

设 s=nums[i]+nums[j]+nums[k],为了判断 s 是不是与 target 最近的数,我们还需要用一个变量 minDiff 维护 ∣s−target∣ 的最小值。分类讨论:如果 s=target,那么答案就是 s,直接返回 s。如果 s>target,那么如果 s−target<minDiff,说明找到了一个与 target 更近的数,更新 minDiff 为 s−target,更新答案为 s。然后和三数之和一样,把 k 减一。

2024-09-16 20:40:47 453

原创 力扣 15.三数之和

思路分析:先将数组nums排序;当 i > 0且nums[i] == nums[i - 1]时即跳过此元素nums[i]:因为已经将 nums[i - 1] 的所有组合加入到结果中,本次双指针搜索只会得到重复组合。left,right 分设在数组索引 (i,len(nums)) 两端,当left < right时循环计算s = nums[i] + nums[left] + nums[right],并按照以下规则执行双指针移动:当s < 0时,left += 1并跳过所有重复的nums[left]

2024-09-16 20:39:09 704

原创 力扣 2824.统计和小于目标的下标对数目

题目相当于从数组中选两个数,我们只关心这两个数的和是否小于 target,由于 a+b=b+a,无论如何排列数组元素,都不会影响加法的结果,所以排序不影响结果的数量。排序后:初始化左右指针 left=0, right=n−1。

2024-09-15 11:50:37 299

原创 力扣 167.两数之和||—输入为有序数组

利用相向双指针,初始时l在最用左边,r在最右边1.numbers[l] + numbers[r] < target 则 l++2.numbers[l] + numbers[r] < target 则 r++3.numbers[l] + numbers[r] == target 说明找到了答案break;l++;}else{r--;

2024-09-15 11:48:52 270

原创 力扣 713.乘积小于k的子数组

713.乘积小于k的子数组

2024-09-14 09:29:44 182

原创 904.水果成篮

题目翻译成人话就是 :找包含两种元素的最长子串,返回其长度,和2958题的区别是:本题是找种类最多为2,上题是单个种类个数最多为k。right < n;++right) {//存储这个窗口内的数以及出现的次数//动态调节滑动窗口的起始位置//出现次数减小为0时需要将对应的键值对从哈希表中移除left++;return res;

2024-09-13 21:32:29 529

原创 2958.最多k个重复元素的最长子数组

滑动窗口

2024-09-13 21:31:14 373

原创 力扣 34. 在排序数组中查找元素的第一个和最后一个位置

红蓝染色体法

2024-09-13 11:16:38 402

原创 力扣 209.长度最小的子数组

滑动窗口

2024-09-13 11:12:19 129

原创 力扣26. 删除有序数组中的重复项

和27题类似(双指针法)一个指针 i 进行数组遍历,另外一个指针 idx 指向有效数组的最后一个位置。只有当 i 所指向的值和 idx 不一致(不重复),才将 i 的值添加到 idx 的下一位置。//第一个元素不动,从第二个元素开始覆盖i < n;

2024-05-28 21:58:37 653

原创 力扣27.移除元素

双指针法先设定变量 idx,指向待插入位置,idx 初始值为 0。然后从题目的「要求/保留逻辑」出发,来决定当遍历到任意元素 i 时,应该做何种决策:1.如果当前元素 i 与移除元素 val 相同,那么跳过该元素。2.如果当前元素 i 与移除元素 val 不同,那么我们将其放到下标 idx 的位置,并让 idx 自增右移。最终得到的 idx 即是答案。i < n;return idx;

2024-05-28 21:54:11 716

原创 力扣459. 重复的子字符串

从长度为 1 到 n/2 的所有可能子串长度中进行枚举,对于每个子串长度,检查是否可以由该子串重复构成原字符串。如果找到了满足条件的子串长度,则返回 true;将原字符串拼接一次,然后去掉第一个和最后一个字符,接着检查这个新字符串中是否包含原字符串。

2024-05-27 21:43:44 315

原创 力扣904. 水果成篮

滑动窗口

2024-05-26 19:59:33 573

原创 力扣3.无重复字符的最长子串

/ 初始化左指针 left 为 -1,无重复子串的长度res 为 0,字符串长度 len 为 s 的长度// 遍历字符串 s,使用 i 作为右指针i < len;i++) {// 更新左指针left,取当前left和该字符上次出现的位置中的较大值// 更新结果 res,取当前结果和右指针 i 与左指针 left 的差值中的较大值// 返回最长无重复子串的长度return res;

2024-05-26 10:14:20 542

原创 力扣209.长度最小的子数组

用两个for循环,然后不断的寻找符合条件的子序列,时间复杂度是O(n^2)。// 最终的结果// 子序列的数值之和// 子序列的长度i++) { // 设置子序列起点为isum = 0;j++) { // 设置子序列终止位置为jif (sum >= s) { // 一旦发现子序列和超过了s,更新result// 取子序列的长度break;// 因为我们是找符合条件最短的子序列,所以一旦符合条件就break// 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列。

2024-05-25 10:20:56 313

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除