自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【力扣一刷】代码随想录day42(动态规划part4 - 背包问题专题:卡码网46.携带研究材料、416.分割等和子集 )

1、定义二维矩阵的时候,行数M对应M件物品,列数N+1对应背包容量,因为还需要考虑容量为0的情况。2、初始化第一行时要考虑背包容量和第0件物品所占空间的大小关系,可以直接从物品0所占空间对应的背包容量开始遍历进行初始化,也可以从背包容量0开始遍历加以判断再进行初始化。3、在递推时,也要考虑背包容量和第0件物品所占空间的大小关系,即能不能放物品 i ,不能放直接返回不放的最大价值,能放要考虑不放 i 和放 i 哪个价值大。4、卡码网的输入输出问题,以及记得要import和写main函数。

2024-04-16 22:29:34 582

原创 【力扣一刷】代码随想录day41(动态规划part3:343. 整数拆分、96.不同的二叉搜索树 )

中等题(需要仔细推理过程)dp(i)就是将 i 拆分为 k 个正整数的和( k >= 2 ),k个整数乘积的最大值。对于 n 而言,需要分 1~n/2 种情况讨论,用 j 代替其中一种那么,j = 1时,剩余的和为n-1,只要比较 1 × dp(n-1) 和 1 × (n-1)哪个更大,即可得到将n拆分为正整数后一定包含正整数1的乘积最大值。以此类推,直至 j = n/2,遍历所有 j 的情况后统计乘积最大值,即可得到dp(n)。

2024-04-15 13:01:02 425

原创 【力扣一刷】代码随想录day39(动态规划part2:62.不同路径、63. 不同路径 II )

中等题只能向右或向下移动一步,当前格子只能由左边(向右移)或上边(向下移)到达到达当前格子的路径数 = 到达左边格子的路径数 + 到达上边格子的路径数。

2024-04-14 00:27:45 418

原创 【力扣一刷】代码随想录day38(动态规划part1:509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼)

英文为Dynamic Programming,简称DP。

2024-04-13 23:04:46 374

原创 【力扣一刷】代码随想录day37(贪心算法part6:738.单调递增的数字、968.监控二叉树、总结 )

中等题。

2024-04-13 18:29:47 1008

原创 【力扣一刷】代码随想录day36(贪心算法part5 - 重叠区间专题:435. 无重叠区间、763.划分字母区间、56. 合并区间 )

则删除最后一个区间,添加合并后的区间到返回列表中,注意合并区间的右边界应该是两区间右边界的最大值;

2024-04-11 23:42:31 730

原创 【力扣一刷】代码随想录day35(贪心算法part4:860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球 )

2、调整顺序如果用ArrayList实现,时间复杂度会偏高,最好用LinkedList,而且要想到按k调整顺序相当于按k为索引,依次将people排序后的各个数组插入链表。存在重叠区域:不需要增加箭,只更新shoot的范围,起始位置不变,结束位置取上一个shoot的结束位置和当前遍历气球的结束位置的最小值。按照身高降序排序后,即使将后面的数组调整到前面,也不会影响前面的 k ,因为前面的肯定比后面的高。1、排序需要重写compare方法,先按身高h降序排序,身高相同的情况下,再按k升序排序。

2024-04-11 16:42:25 315

原创 【力扣一刷】代码随想录day34(贪心算法part3:1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果)

lambda表达式return的不同类型1、静态方法2、实例方法3、特殊类型方法4、构造器。

2024-04-10 11:33:01 777

原创 【力扣一刷】代码随想录day32(贪心算法part2:122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II )

中等题(偏简单)

2024-04-09 01:10:02 630

原创 【力扣一刷】代码随想录day31(贪心算法part1:理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和 )

利用摆动标记mark,区分前两种情况,最后一个点一定要记录结果,对应初始值res=1。

2024-04-07 16:11:52 655

原创 【力扣一刷】代码随想录day29(回溯算法part5:491.递增子序列、46.全排列、47.全排列 II)

1、处理当前节点如果到当前节点的路径长度为1或者为0,直接遍历访问子节点即可如果到当前节点的路径长度大于/等于2,则判断是否递增如果递增,则记录路径如果不是递增,则不记录路径,不访问子节点,直接返回在for循环遍历前,定义Set对象,用于记录当前层遍历过的子节点(注意:不能定义为全局变量,因为递归的时候会加入其它层的节点)。在for循环遍历时,如果当前层前面出现过相同值的子节点,就不遍历该子节点,跳过。需要【判断子序列是否递增】和【考虑如何去重】

2024-04-04 00:08:18 441

原创 Win10 下 Vision Mamba(Vim-main)的环境配置(libcuda.so文件无法找到,windows系统运行失败)

请直接拉到最后查看运行失败的原因,如有解决方案欢迎讨论。

2024-04-02 17:34:04 1389 2

原创 【力扣一刷】代码随想录day28(回溯算法part4:93.复原IP地址、78.子集、90.子集II )

去重的时候,是判断当前子节点在当前层前面是否已经遍历过,是 i > start, 而不是 i > 0。i > start才能保证判断的是当前层的第二个节点,而当前层的第一个节点也可能符合 i > 0,万一该节点等于数组中上一个节点的值,则该节点就无法遍历了。只递归遍历单独"0"这个子串的分支,​遍历完后直接return,不再遍历剩下的"0x"不合法的IP段。1、将题目抽象成树,子节点为指定开始索引start的子串,在遍历子节点的时候进行剪枝(打叉的地方表示剪枝),保证子节点合法。中等题(偏难,坑很多)

2024-04-02 15:16:02 298

原创 【力扣一刷】代码随想录day27(回溯算法part3:39. 组合总和、40.组合总和II、131.分割回文串)

第一层中,start = 0,即所有子节点都包含s中的第一个字符a,如果子节点对应的子串不是回文串(例如第二个子节点"ab"),那么就不符合题目要求,该分支不需要进行递归,直接遍历下一个节点即可。第二层中,start = 1, 与上面的start的关系是,第二层的start是第一层子串的结束索引/子串最后一个字符对应的索引 + 1。将递归&回溯想象成一棵树,关键是思考【树的子节点含义是什么?遍历的同时实现去重,先排序,然后根据当前子节点与前一个子节点的值是否相同,不相同再遍历,以实现进行去重。

2024-04-01 22:07:04 412 1

原创 【力扣一刷】代码随想录day25(回溯算法part2:216.组合总和III、17.电话号码的字母组合)

空间复杂度: O(3^N * 4^M),递归栈占的空间取决于递归的深度O(N+M),结果集的空间取决于最终的组合数量 O(3^N * 4^M),O(3^N * 4^M) > O(N+M)确认单层递归逻辑:获取当前层的所有子节点(kids指第idx个数字在电话按钮上对应的字母字符串),遍历所有子节点,记录子节点的所有路径。时间复杂度: O(9^k × k),每个路径k个数,每个数有9种取值可能,即O(9^k),复制O(k)剪枝:如果到达当前节点的路径之和已经大于n了,就不需要再遍历该节点的子节点了。

2024-03-30 19:14:38 138 1

原创 【力扣一刷】代码随想录day24(回溯算法part1:回溯理论基础、77. 组合)

用for循环遍历所有子节点,先将子节点加入路径,再将子节点放入递归记录该子节点对应的所有结果,再在子节点递归结束后恢复当前节点对应路径,继续遍历下一个子节点。如果当前节点path.getLast()的最大路径长度(剩下可用元素 + 当前路径长度) < k,直接return即可。时间复杂度: O(2^n × n),所有n个元素都有2种选择即放/不放进结果中O(2^n),复制O(n)确定单层递归逻辑(遍历所有子节点,处理子节点,递归子节点,回溯恢复现场)确定参数(返回值一般为void,用成员变量记录结果)

2024-03-30 12:19:04 162

原创 【力扣一刷】代码随想录day23(669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、二叉树总结)

【669. 修剪二叉搜索树】中等题(偏简单)方法一 递归关键是看是否需要更换根节点如果根节点在区间内,则根节点不需要更换。如果根节点不在区间内,则区间就在根节点的左子树或者右子树,需要更换根节点(相当于把根节点修剪掉),返回对应子树的修剪结果。

2024-03-30 00:32:23 290 1

原创 win10+cuda11.8+cudnn8.6.0安装

复制cudnn-windows-x86_64-8.6.0.163_cuda11-archive文件夹下的bin、include、lib文件夹,粘贴到cuda11.8的安装目录C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8中。打开Anaconda控制台 -> 激活安装了gpu版本的pytorch的环境 -> 输入以下命令 -> 两个True成功返回说明cuda和cudnn安装成功。3、确认cuda11.8是否安装成功。下载后傻瓜式安装即可。

2024-03-28 23:32:41 783 1

原创 【力扣一刷】代码随想录day22(235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点 )

中等题。

2024-03-27 12:34:52 1012 1

原创 【力扣一刷】代码随想录day21(530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先 )

简单题中序遍历的数组是升序数组。通过中序遍历可以确保当前遍历的节点的val大于上一个节点的val,再计算两节点的差值,更新最小差值即可。

2024-03-26 23:35:35 546

原创 【力扣一刷】代码随想录day20(654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树 )

不能单纯的比较左节点小于中间节点,右节点大于中间节点,因为题目要求“左子树所有节点小于中间节点,右子树所有节点大于中间节点”。

2024-03-25 21:28:38 760 1

原创 【力扣一刷】代码随想录day18 ( 513.找树左下角的值、112. 路径总和、113.路径总和ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树 )

利用HashMap加快索引查询,key为节点的val,value为节点在中序遍历数组的索引值。传入中序和后序遍历数组的开始索引和结束索引,不需要额外的数组存储。* }* }*/// 创建哈希表,加速根节点val值的索引查找i++){// 1、确定参数和返回值,参数传入区间和索引,要求索引对应左闭右开原则,返回二叉树的根节点// 2、确定终止条件(原则是左闭右开,如果开始和结束相等,则证明区间为空,返回null)// 3、确定单层递归逻辑。

2024-03-24 18:07:04 1091 1

原创 【力扣一刷】代码随想录day17 ( 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和 )

一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。

2024-03-23 23:20:57 365

原创 【力扣一刷】代码随想录day16 (104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数)【递归版】

目的是计算当前节点的深度和当前的最大深度,因此需要传入当前节点和父节点的深度。由于是前序遍历,先获取的当前节点/中节点的深度,再获取左右节点的深度,此时左右节点的深度返回没有意义。父节点的最大高度 = 左右子节点高度的最大值 + 1(需要先访问左右节点,再访问中节点,所以对应的是后序遍历)如果不是,继续遍历左节点和右节点,当前节点对应子树的所有节点数 = 左右子树所有节点之和 + 1。确定单层递归逻辑:获取当前节点/父节点的高度,即要获取左右子节点的最大高度再+1。

2024-03-23 00:36:11 953

原创 【力扣一刷】代码随想录day15(层序遍历10题、226.翻转二叉树 、101.对称二叉树 2)

递归的【中序遍历】不能使用上面的模板,因为中序是左-中-右,左子树反转完,互换左右子树,再反转右子树,此时的右子树是由左子树互换过来的,无法完成题目的要求。递归遍历:一直访问到最深的节点,然后回溯到它的父节点,遍历另一条路径,直到遍历完所有节点,对应DFS(深度优先搜索),利用递归/栈实现。为每一层最左边的节点虚构一个左边节点pre,让左边的节点pre指向当前节点cur,再将当前节点cur指定为下一个节点的左边节点pre。cur为null的时候,获取栈顶(栈顶为当前访问的节点),互换该节点的左右子树。

2024-03-21 16:57:27 1002 1

原创 【力扣一刷】代码随想录day14(二叉树理论基础、 递归遍历 、 迭代遍历、统一迭代)

int val;// 无参构造器// 只有值的构造器// 全参构造器。

2024-03-20 01:49:36 619 1

原创 【力扣一刷】代码随想录day13(239、347、 栈与队列总结)

思路:利用双端队列实现,队列只存可能为最大值的值,队头始终是最大值1、设定双端队列的规则队头始终是队列的最大值,队列始终是降序排序的。2、利用push(int x)方法维护队列规则需要先将队列中x前面比x小的值弹出,再将x压入队列。3、利用for循环遍历数组中的每个元素当还没遍历到k个值时,只需要将遍历到的元素压入队列当遍历到第k个值时,还要记录当前滑动窗口的最大值,弹出窗口最左边的值当前窗口最左边的值很可能在【将当前遍历元素push进队列】的时候就已经弹出(维护规则所需),因此要加判断条件。

2024-03-17 00:46:42 274 1

原创 【力扣一刷】代码随想录day11(20、1047、 150)

Java中的Deque接口。

2024-03-16 18:24:02 973 1

原创 【力扣一刷】代码随想录day10(栈和队列基础、232、 225)

利用Java实现栈和队列上面代码的输出:2、用LinkedList实现栈二、队列(先进先出,左边队头,右边队尾)上面代码的输出:【232.用栈实现队列】时间复杂度: O(n),pop()和peak()都要用pour(),都是O(n), empty()和push()都是O(1)空间复杂度: O(n),两个栈 stackIn 和 stackOut都为 O(n)push:pop:时间复杂度:

2024-03-16 00:56:40 551 1

原创 【力扣一刷】代码随想录day8(344、 541、卡码网54、151、卡码网55)

由于Java中的String类为不可变类型,因此不能按指定索引修改字符,需要将字符串转换成可变类型的变量(如:StringBuffer对象,字符数组等)。

2024-03-14 00:46:38 804 2

原创 【力扣一刷】代码随想录day7(454、 383、15、18、哈希表总结)

1、双指针法将时间复杂度:O(n^4)的解法优化为 O(n^3)的解法。2、此题相加的和不是0,而是任意值target,如果target<0,nums[i]>target,nums[i]加上后面的值可能会更小,即还有可能达到题目条件的组合未遍历完。只有当nums[i] > target,同时nums[i]>0,才能截止遍历返回结果。时间复杂度: O(n^3),两层for循环内部嵌套了while空间复杂度: O(1),返回值不需要考虑空间复杂度【 总结 】1、数组比Map构建哈希表更有效。

2024-03-12 18:01:39 796 3

原创 【力扣一刷】代码随想录day6( 哈希表基础、242、 349、202、1)

【哈希表理论基础 】提高查找速度,普通遍历查找的时间复杂度为O(n),而哈希表实现O(1)【242. 有效的字母异位词 】

2024-03-12 10:52:33 694 1

原创 【力扣一刷】代码随想录day4( 链表总结、24、 19、面试题 02.07、142)

2、快慢指针一起走,直至快指针指向末尾的null。

2024-03-09 18:57:43 550

原创 【力扣一刷】代码随想录day3(链表基础、203、707、206)

通常head指向第一个节点,即head.val存的就是第一个节点的值。

2024-03-08 23:47:23 263

原创 【力扣一刷】代码随想录day2(977、209、59)

【977.有序数组的平方】

2024-03-07 23:59:43 216

原创 【力扣一刷】代码随想录day1(数组基础、704、27)

当nums=null的时候,不能使用nums.length获取长度。当nums={}的时候,能够使用nums.length获取长度,长度为0。

2024-03-06 23:48:53 308 3

空空如也

空空如也

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

TA关注的人

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