- 博客(32)
- 收藏
- 关注
原创 AutoDL 平台摩尔线程的 vllm-musa 配置
需要安装 vLLM 0.4.2 的 MUSA 适配(fix_version),不要装当前默认分支。如果失败,建议在 AutoDL 平台更换实例。,会覆盖 AutoDL 平台原本镜像中的。,而这两个依赖文件里包含。
2026-05-14 17:23:38
346
原创 【踩坑笔记】Geforce RTX5060 显卡下的 Pytorch 安装
查看右上角显示的 CUDA 版本(我这里是13.2),该数字表示驱动支持的最高 CUDA 版本,CUDA 版本需与显卡驱动、cuDNN 版本严格匹配,否则会导致兼容性问题。如果显示 Package(s) not found 就说明已卸载。但这种方式下载通常很慢且不稳定,推荐国内镜像源。打开后根据自己的配置选择对应的CUDA下载。,非50系显卡可以选择 Stable 版本。卸载步骤(Windows / .venv)这里选择 CUDA 12.8。例如,我这边选择的版本是。
2026-04-02 10:53:20
1358
1
原创 【Day30】卡码网:46. 携带研究材料,LeetCode:416. 分割等和子集
转化为01-背包问题:每个元素只能选或不选,背包容量为。,求是否能恰好装满。
2026-03-22 19:56:10
209
原创 【Day29】LeetCode:62. 不同路径,63. 不同路径 II,343. 整数拆分,96. 不同的二叉搜索树
为头结点左子树节点数量,为头结点右子树节点数量。第一行和第一列单独处理。第一行和第一列单独处理。
2026-03-21 03:42:32
247
原创 【Day28】LeetCode:509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
爬 n 级楼梯的爬法,可以从 n -1 级跨 1 个台阶,也可以从 n - 2 级跨 2 个台阶。用 dp 数组记录到每个下标的最小耗费,要登顶则 i == n,刚好越界。
2026-03-19 22:19:41
83
原创 【Day27】LeetCode:56. 合并区间,738. 单调递增的数字
所以标记数字 2 ,前一位 - 1,得到。,使得其后所有数都为9,然后。,即出现递减,则标记。
2026-03-18 20:23:05
87
原创 【Day26】LeetCode:452. 用最少数量的箭引爆气球,435. 无重叠区间,763. 划分字母区间
贪心时选择最早结束的区间,可以最大化剩余空间,使得后续有更多区间可能被容纳。
2026-03-17 23:54:54
78
原创 【Day25】LeetCode:134. 加油站,135. 分发糖果,860. 柠檬水找零,406. 根据身高重建队列
尽可能用 10 找零。如果找零时 5 不足,则无法找零。通过两次遍历来满足条件。
2026-03-16 23:51:07
258
原创 【Day24】LeetCode:122. 买卖股票的最佳时机 II,55. 跳跃游戏,45. 跳跃游戏II,1005. K次取反后最大化的数组和
k 表示当前能够到达的最远位置。遍历数组,如果 i 的位置 k 能到达( i 不在 k 的右边),则用。思路和上题一致,从头开始,每次跳之前都规划跳到哪里能使得下一跳更远(使得跳的次数更少)。如果 i 的位置 k 不能到达,则立即返回 False。找出数组的单调递增区间,在每个单调递增区间持有就行。从头开始,每次跳之前都规划跳到哪里能使得下一跳更远。首先对数组排序,优先使得绝对值最大的负数变成正数。
2026-03-14 23:38:04
235
原创 【Day23】LeetCode:455. 分发饼干,376. 摆动序列,53. 最大子序和
如果一段子数组是单调递增的,那么其中任意两个元素的差都为正数,无法形成摆动。此时,我们只需保留该单调区间的第一个和最后一个元素,因为它们自然形成一个上升趋势和一个下降趋势的转折点。同理,如果一段子数组是单调递减的,只保留首尾。贪心算法,胃口最大的孩子匹配最大的饼干。从大到小遍历孩子的胃口:如果当前饼干能满足,则给出;遍历数组,考量以 nums[i] 结尾的连续子数组的最大和,记作。(2)重新开始一个新的子数组,只包含。选择两者中较大的一个作为新的。如果存在重复元素,直接跳过。加入之前的子数组,即。
2026-03-13 23:41:55
60
原创 【Day22】491. 递增子序列,46. 全排列,47. 全排列 II
和之前的思路类似,先对数组进行排序,方便后续去重。其余和上题一致,同时注意额外的剪枝操作:当前数字与前一个数字相同,并且。但如果第一个1没有选择,第二个1选择的话,就会在后续出现。,如果第一个1已经被选择,那么第二个1也可以被选择,得到。集合记录本层已经选择过的元素。末尾时,如果当前元素已经在。列表记录哪些数字已被使用。
2026-03-12 21:58:29
257
原创 【Day21】LeetCode:93. 复原IP地址,78. 子集,90. 子集 II
首先对数组进行排序,后续同一层的递归中,如果遇到元素相同则跳过。
2026-03-11 20:58:26
67
原创 【Day20】LeetCode:39. 组合总和,40. 组合总和II,131. 分割回文串
的条件保证了我们只跳过同一层中的重复,而不影响不同层(例如 [1,1,2] 中两个 1 可以同时出现在一个组合中,因为它们在递归的不同层)。排序后,如果当前数字已经大于剩余目标值,那么它后面的数字只会更大,可以立即跳出循环。),那么以当前数字开头的所有组合都会与以前一个数字开头的组合重复,因此跳过。到达字符串末尾时,说明找到了一个完整的分割方案,将当前路径加入结果。回溯:在递归返回后,将最后加入的子串弹出,以便尝试其他分割方式。(2)如果不是,则跳过该分割点,继续尝试下一个。,然后递归处理剩余部分。
2026-03-10 21:56:14
191
原创 【Day19】LeetCode:77. 组合,216. 组合总和III,17. 电话号码的字母组合
【代码】【Day】LeetCode:77. 组合,216. 组合总和III,17. 电话号码的字母组合。
2026-03-09 22:04:30
211
原创 【Day18】LeetCode:669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树
利用反向中序遍历(右-中-左),则每个访问节点都变成所有已访问过的节点总和。利用数组已排序的特性,通过。
2026-03-07 21:37:30
187
原创 【Day17】LeetCode:235. 二叉搜索树的最近公共祖先,701. 二叉搜索树中的插入操作,450. 删除二叉搜索树中的节点
的性质,不断向下深入,如果当前节点较小,则转到左子节点;如果当前节点较小,则插到右子节点。如果当前节点已经被占用,则继续向对应方向深入,直到找到可以插入的节点。的右子节点(可能为空)。这种方式相当于用后继的值覆盖当前节点,再物理移除后继节点,保证了。,然后删除后继节点。由于后继节点没有左子节点,删除它只需将。就是它们路径上的第一个公共节点,即最近公共祖先。是父节点的左或右孩子,将父节点的对应指针指向。的右子树中的最左节点,记录后继的父节点。这样就实现了用子节点替换当前节点。记录当前节点的父节点。
2026-03-06 22:28:58
184
原创 【Day16】LeetCode:530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先
的中序遍历结果是升序的,遍历中序遍历结果。的中序遍历结果是升序的,遍历中序遍历结果。,两两相减,得到最小值。,转为求一个数组的众数。
2026-03-05 22:54:19
183
原创 【Day15】LeetCode:654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树
的中序遍历结果一定是。
2026-03-04 21:09:53
357
原创 【Day14】LeetCode:513. 找树左下角的值,112. 路径总和,113. 路径总和 II,106. 从中序与后序遍历序列构造二叉树,105. 从前序与中序遍历序列构造二叉树
前序遍历二叉树的节点,不断将(节点,从根节点到该节点的路径总和)压入栈中,直到访问到符合目标的节点。直接利用层序遍历,访问到最后一层时,队列中的首个元素就是树左下角的值。参考上题的思路,存储时多存储一个总路径。
2026-03-02 21:16:14
290
原创 【Day13】LeetCode:110. 平衡二叉树,LeetCode:404. 左叶子之和,LeetCode:257. 二叉树的所有路径,LeetCode:222. 完全二叉树的节点个数
On。
2026-02-28 22:51:58
520
原创 【Day12】LeetCode:226. 翻转二叉树,101. 对称二叉树,104. 二叉树的最大深度,111. 二叉树的最小深度
类似层序遍历,一层一层地遍历,直到遇到叶子节点,就是二叉树的最小深度。将需要比较的两个节点两两组合加入队列,方便进行比较。**注意:**这题和上题不同,不要直接写。可以利用层序遍历,每访问一层就记录+1。就回直接返回 1 而不是 5.为了方便对深度进行管理,可以将。
2026-02-27 21:19:46
284
原创 【Day11】LeetCode:二叉树遍历(前/中/后序遍历、层序遍历)
和前序遍历相反,我们入栈的时候先入左子节点,再入右子节点,这样出栈的时候就是先右后左。最后将整个结果倒序,就得到了“左—右—中”的顺序。利用栈的 FIFO 特性,入栈的时候是先入右子节点,再入左子节点,这样出栈的时候就是先左后右。思路和上题一致,不过就是将最后的结果倒置。
2026-02-26 21:57:02
414
原创 【Day10】LeetCode:150. 逆波兰表达式求值,239. 滑动窗口最大值,347. 前 K 个高频元素
如果遇到数字就压入栈中,如果遇到运算符就弹出栈顶两个元素进行运算(先弹出来的是运算符右边的数字,后弹出来的是运算符左边的数字),将结果压入栈中,最后栈中剩下的数字就是结果。每次移动滑动窗口,就遍历窗口中的元素,找出最小值并记录。维护一个单调递减的双端队列,队列中存储元素。,其对应值是可能成为最大值的元素。,每个元素最多入队和出队一次。较大的时候,时间复杂度接近。模块可以提供小顶堆。
2026-02-25 19:56:40
612
原创 【Day9】LeetCode:232. 用栈实现队列,225. 用队列实现栈,20. 有效的括号,1047. 删除字符串中的所有相邻重复项
遍历字符串,如果是左侧括号,则压入栈中;如果是右侧括号,则改为弹出与之匹配的栈顶元素。在插入的时候,直接压入输入栈;在弹出的时候,直接弹出输出栈的栈顶元素。直接用一个队列来实现栈,但每次在插入的时候,都将插入的元素。用两个栈对队列进行模拟,一个为输入栈。移动到队首,这样就实现了 FILO。和上题思路一致,遍历字符串。
2026-02-24 16:46:28
271
原创 【Day8】LeetCode:151. 反转字符串中的单词,卡码网:55.右旋转字符串
利用 python 中的字符串切片,将原来的字符串。函数对字符串每个单词进行拆分。,再将整个字符串反转,得到。,再按“右+左”进行拼接。python 可以直接用。区间内的元素反转,得到。
2026-02-23 20:25:05
610
原创 【Day7】LeetCode:344. 反转字符串,541. 反转字符串 II,卡码网:54.替换数字
扩充数组后,再从后向前进行替换会更加高效。个字符,这一步可以和前面的反转。
2026-02-22 17:08:11
583
原创 【Day6】LeetCode:454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和
将数组两两分组,分别将两组数据的可能总和存储在字典 sum1 和 sum2 中(key:两个数组之和,value:满足对应之和的数据有多少对)。最后只需要通过遍历 sum1 和 sum2,统计出总和为 0 的坐标可能数。)思路一致,不过最后判断的时候是 ransomNote 不能用超了 magazine 中的字母,但 magazine 中的字母可以没被用完。排序 + 双指针:考虑的输出的结果不涉及原数组的坐标,可以用排序 + 双指针的方法。判断三个数的和是否为 0,符合则添加进结果。
2026-02-21 23:48:23
558
原创 【Day5】LeetCode: 242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和
用一个字典 dic 来记录 s 中每个字母出现的次数,然后遍历 t,t 中没出现一个字母,就将字典里对应值记录 -1,如果 t 中出现了 dic 里没记录的字母,那么返回 False;分别记录两个数组的数字种类,python 中可以直接用集合 set() 来剔除重复数字,然后比较二者的数字种类,如果nums1的数字在nums2中出现过,则加入结果。,2这个值我们之前访问过,我们只需要得到它的坐标和当前访问的。的 0 坐标时,得到的值为 2,容易得出我们需要的值为。的 1 坐标时,得到的值为7,
2026-02-15 20:48:48
724
原创 【Day4】LeetCode:24. 两两交换链表中的节点,19. 删除链表的倒数第 N 个结点,面试题 02.07. 链表相交,142. 环形链表 II
依旧沿用快慢指针的思路,先通过遍历两个链表,获得两个链表的长度,并计算长度差值。长的链表对应的指针先走差值的格数,此后两个链表的指针同步移动,这样如果二者有相交的节点,那么两个指针必然会相遇,且第一个相遇的位置就是两个链表的首个交点。判定链表是否有环很简单,只需要用快慢指针,fast 快指针一次走两格,slow 慢指针一次走一格,如果二者相遇,那么该链表必定有环。,那意味着如果此时把 fast 指针移回起点,和 slow 指针一起同步移动,那么当慢指针下一次到达环的入口的时候,快、慢指针走了。
2026-02-14 21:39:48
622
原创 【Day3】LeetCode:203. 移除链表元素,707. 设计链表,206. 反转链表
我们发现了一个新问题:链表断开了。(2)创建一个虚拟头节点 dummyHead,这个节点指向原本的头节点(dummyHead.next = head),这样我们的 head 就有了前驱 dummyHead,可以和后续删除操作进行统一。删除单链表中的一个元素,即将该节点前一个的节点连接到该节点的后一个节点,由于单链表的限制,我们只能修改前一个结点的信息。简而言之就是不断改变链表箭头的朝向,为方便表示,我们用一个 curNode 表示当前节点,preNode 节点来记录节点原本的前驱(变换后会变成后继)。
2026-02-13 18:41:26
558
原创 【Day2】LeetCode:209. 长度最小的子数组,59. 螺旋矩阵 II
最先想到的思路就是暴搜,以每个元素作为区间的左端点,遍历后续所有元素作为右端点,分别统计出区间长度和区间内的元素总和,最后选出最符合条件的答案。这样做的本质就是将一个一维数组变成一个二维表,两轴都是数组所有元素的索引,表内存放的是对应区间长度和区间内的元素总和。需要做的就是模拟填充矩阵的过程,以矩阵的主对角线上的元素为起始点,逐步画圈(有点像某道经典的一笔画题),直到所有的值都填满。问题出在Python的浅拷贝上,以这种方式创建的列表,里面子列表的内存是指向同一块的,所以该一个其他也会跟着改动。
2026-02-12 22:31:21
593
原创 【Day1】LeetCode:704. 二分查找,27. 移除元素,977.有序数组的平方
个人思路是通过二分查找法中对middle分别按向上和向下取整,最后查找出对应元素的上下界。但目前有错误,正在思考。# 左闭右闭left = 0# middle 取下界else:break# middle 取上界left = 0else:break。
2026-02-11 18:58:34
753
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅