自定义博客皮肤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)
  • 收藏
  • 关注

原创 Ubuntu完整复制其他用户的anaconda及虚拟环境

目标anaconda在:/home/A/anaconda3下,但是作为新来的实习生B,需要继承先辈A的工作,把anaconda整体迁移,这样就可以完美继承A安装的库、包和虚拟环境等,否则一切都要重头再来。修改虚拟环境下的可执行文件pip之后,进入虚拟环境(以one_env为例)后pip和python才可用。把anaconda整体从/home/A/anaconda3/复制到/home/B目录下。修改可执行文件pip之后,pip和python才可用。此时在命令行中输入conda,就会显示一些命令参数。

2025-04-01 16:52:49 336

原创 代码随想录算法训练营第三十六天 | LeetCode188.买卖股票的最佳时机IV、LeetCode309.买卖股票的最佳时机含冰冻期、LeetCode714. 买卖股票的最佳时机含手续费

股票问题总结。

2025-03-18 20:06:20 789

原创 代码随想录算法训练营第三十五天 | LeetCode121.买卖股票的最佳时机、LeetCode122.买卖股票的最佳时机II、LeetCode123. 买卖股票的最佳时机III

一天一共有五个状态:0代表没有操作、1代表第一次持有股票、2代表第一次不持有股票、3代表第二次持有股票、4代表第二次不持有股票。这里说的是“持有”,“持有”不代表就是当天“买入”!也有可能是昨天就买入了,今天保持持有的状态。这里说的是“持有”,“持有”不代表就是当天“买入”!**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。贪心思路:最左最小值,取最右最大值,那么得到的差值就是最大利润。在每一天,你可以决定是否购买和/或出售股票。代表第一次不持有股票的最大利润、

2025-03-18 16:42:21 910

原创 代码随想录算法训练营第三十四天 | LeetCode198.打家劫舍、LeetCode213.打家劫舍II、LeetCode337. 打家劫舍III

如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。如果不偷第i房间,那么dp[i] = dp[i - 1],即考 虑i-1房,(注意这里是考虑,并不是一定要偷i-1房,这是很多同学容易混淆的点)每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。

2025-03-15 16:35:10 699

原创 代码随想录算法训练营第三十三天 | LeetCode518.零钱兑换、LeetCode279.完全平方数、LeetCode139.单词拆分

相关资源背包总结。

2025-03-10 19:43:47 673

原创 代码随想录算法训练营第三十二天 | 卡码52.携带研究材料、LeetCode518.零钱兑换II、LeetCode377.组合总和IV、卡码网57.爬楼梯(进阶)

探究为何滚动数组方式解决完全背包问题可以外遍历背包容量内遍历物品种类(未解之谜)

2025-03-10 17:24:54 558

原创 代码随想录算法训练营第三十一天 | LeetCode1049.最后一块石头的重量II、LeetCode494.目标和、LeetCode474. 一和零

相关资源1049. 最后一块石头的重量 II最后一块石头的重量IILeetCode:1049.最后一块石头的重量II有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。如果x == y,那么两块石头都会被完全粉碎;如果x!= y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回。

2025-03-03 17:25:57 557

原创 代码随想录算法训练营第三十天 | 卡码网46.携带研究材料(二维解法)、卡码网46.携带研究材料(滚动数组)、LeetCode416.分割等和子集

至于为什么先遍历物品,再遍历背包容量,假如顺序颠倒过来,其实可以还原成二维遍历过程,因为二维遍历的从上往下再从左往右,当前单元格其实是用到了当前单元格的上一个单元格,并不能竖着拷贝(要想这样,除非。小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。,背包体积是sum/2。

2025-03-02 20:04:40 582

原创 代码随想录算法训练营第二十九天 | LeetCode62.不同路径、LeetCode63.不同路径II、LeetCode343.整数拆分、LeetCode96.不同的二叉搜索树

机器人试图达到网格的右下角(在下图中标记为 “Finish” )。:这个题目还可以用深搜的方式来做,但是会超时,因为达到指数级别的复杂度。递推关系:dp[i] += dp[j - 1] * dp[i - j]还可以用贪心:每次拆成n个3,如果剩下是4,则保留4,然后相乘,网格的左上角 (起始点在下图中标记为 “Start” )。一个是j * dp[i - j],相当于是拆分(i - j)返回满足题意的二叉搜索树的种数。返回机器人能够到达右下角的不同路径数量。),并使这些整数的乘积最大化。

2025-03-02 14:10:34 850

原创 代码随想录算法训练营第二十八天 | 动态规划理论基础、LeetCode509.斐波那契数、LeetCode70.爬楼梯、LeetCode746.使用最少花费爬楼梯

我的上面思路是递归,动态规划和递归是两个范畴的概念,前者是拆分问题,利用子问题的解,得到原始问题的解,递归属于程序设计领域,其含义是程序调用自身,动态规划可以通过递归实现,也可以通过填表实现,为了优化程序运行的效率,填表比较好(等价于递归加缓存)个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。开始,后面的每一项数字都是前面两项数字的和。:动态规划中每一个状态一定是由上一个状态推导出来的,:和录哥思路一致,没有纠结于i=0的情况的初始化。你有多少种不同的方法可以爬到楼顶呢?

2025-03-01 18:21:42 927

原创 代码随想录算法训练营第二十七天 | LeetCode56.合并区间、LeetCode738.单调递增的数字、LeetCode968.监控二叉树、总结

贪心无套路、无框架主要的题型包括:两个维度权衡问题、覆盖区间问题。

2025-02-26 12:17:27 384

原创 代码随想录算法训练营第二十六天 | LeetCode452.用最少数量的箭引爆气球、LeetCode435.无重叠区间、LeetCode763.划分字母区间

我能想到这是在找重叠区间的最少个数,但不知道怎么实现,主要问题在于输入的区间参与到哪些区间的合并中去,以及怎么找一些区间的重叠区间,要不要算法设计成一旦有交集就融合进去。流程就是先对区间进行排序,然后判断当前point和上一个point是否重叠,重叠(左边界小于右边界)的话更新右边界,不重叠则结果加一【妙】:上一题射气球其实求的就是非交叉区间的数量,也就是无重叠区间数量,要移除的数量就是用总数减去无重叠区间的数量。:看了出错的用例发现,我这种吸收的方法不能保证提取到的是重叠区域。可以射出的弓箭的数量。

2025-02-25 11:47:22 712

原创 代码随想录算法训练营第二十五天 | LeetCode134.加油站、LeetCode135.分发糖果、LeetCode860.柠檬水找零、LeetCode406.根据身高重建队列

我的贪心策略是当前给的糖果数从1开始递增,如果下一个孩子评分等于或者低于上一个孩子评分,则给的数目减一(减一就变成0了的话,前面每个孩子都多拿一个糖果),如果下一个孩子评分等于或者低于上一个孩子评分,则给的数目加一。:用例ratings = [1,3,2,2,1],我的策略当遇到2的时候是 3,4,3,2,1,明显不合理,1,2,1,2,1。这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回。

2025-02-24 19:30:09 684

原创 代码随想录算法训练营第二十四天 | LeetCode122.买卖股票的最佳时光机II、LeetCode55.跳跃游戏、LeetCode45.跳跃游戏II、LeetCode1005.K次取反最数组和

局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。如果将负数都转变为正数了,K依然大于0,此时的问题是一个有序正整数序列,如何转变K次正负,让 数组和 达到最大。那么又是一个贪心:局部最优:只找数值最小的正整数进行反转,当前数值和可以达到最大。数组中的每个元素代表你在该位置可以跳跃的最大长度。:把利润分解为每天为单位的维度,局部最优:收集每天的正利润,全局最优:求得最大利润。:我的贪心策略是:如果后一天比前一天下跌了,那么就抛售,而等到上涨的时候购买股票。

2024-11-16 20:18:08 758

原创 代码随想录算法训练营第二十三天 | LeetCode455.分发饼干、LeetCode376.摆动序列、LeetCode53.最大子序和

贪心算法并没有固定的套路,靠自己手动模拟感觉可以局部最优推出整体最优,如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划。:只想到了两次for循环暴力求解,但是失去了算法题的意义,我记得《算法之魂》这本书详细讨论过这道题,但我还是不得要领。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。,这个孩子会得到满足。:贪心策略:先给孩子的胃口和饼干的大小从小到大排序,然后依次满足小胃口孩子。做题的时候,只要想清楚局部最优是什么,如果推导出全局最优,其实就够了。

2024-11-14 20:38:59 475

原创 代码随想录算法训练营第二十二天 | LeetCode491.递增子序列、LeetCode46.全排列、LeetCode47.全排列II

回溯总结回溯就是深度优先搜索!

2024-11-11 23:32:45 369

原创 代码随想录算法训练营第二十一天 | LeetCode93.复原IP地址、LeetCode78.子集、LeetCode90.子集II

这道题目写了好久好久才写出来,主要问题在于递归的终止条件不太清楚,并且判断每个整数段是否位于。:其实就是组合,但需要把空集加入结果集,并且每个叶子节点都要记录。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。:和之前的组合总和II很相似,也是需要一个去重的过程。,用以表示一个 IP 地址,返回所有可能的。返回的解集中,子集可以按。思路大差不差,但录哥直接在原字符串中。返回该数组所有可能的子集(幂集)。之间组成,且不能含有前导。之间组成,且不能含有前导。,这些地址可以通过在。

2024-11-07 20:57:47 337

原创 代码随想录算法训练营第二十天 | LeetCode39.组合总和、LeetCode40.组合总和II、LeetCode131.分割回文串

组合回溯问题,由于同一个数字可以无限制重复被选取,且整数数组中为正整数,所以终止条件应该是总和等于目标整数,而循环为从startIndex开始。:通过startIndex去重,这个是最接近我思路的代码,不过我的去重条件是i>=1,这里就很不对。:意识到需要去重,明明只要跳过去重复节点就好,但不知道咋实现,多次尝试无果,遂看录哥讲解。:树枝无需去重,而树层需要去重!如果至少一个数字的被选数量不同,则两种组合是不同的。分割成一些子串,使每个子串都是回文串。对于给定的输入,保证和为。:解集不能包含重复的组合。

2024-11-06 23:20:12 370

原创 代码随想录算法训练营第十九天 | LeetCode77.组合、LeetCode216.组合总和III、LeetCode17.电话号码的字母组合

很暴力的方法我知道,无非就是字符串中每一个字符对应一个集合,然后集合里的元素互相匹配,但是不知道怎么用代码实现。:和前面组合问题不能,树中每层节点为新的集合,所以index应该指向新的字母进行递归。:思路一致,但剪枝更加彻底,一方面是超过了目标和,另一方面是剩余元素个数小于k。回溯法解决的问题:组合问题、切割问题、子集问题、排列问题、棋盘问题。:照猫画虎,组合问题每次就取当前元素后面的范围中k-1的数的组合。该列表不能包含相同的组合两次,组合可以以任何顺序返回。的字符串,返回所有它能表示的字母组合。

2024-10-31 10:34:36 979

原创 代码随想录算法训练营第十八天 | LeetCode669.修剪二叉搜索树、LeetCode108.将有序数组转换为二叉搜索树、LeetCode538.把二叉搜索树转换为累加树

题型关键理念二叉树的遍历前序、中序和后序;层序翻转二叉树前序、后序遍历对称二叉树遍历两棵树二叉树的最大深度、最小深度后序遍历完全二叉树的节点个数递归、通过2n-1优化平衡二叉树分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1二叉树的所有路径前序遍历、回溯左叶子之和当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和找树左下角的值找深度最大的叶子节点路径总和。

2024-10-25 22:48:08 822

原创 代码随想录算法训练营第十七天 | LeetCode235.二叉搜索树的最近公共祖先、LeetCode701.二叉搜索树中的插入操作、LeetCode450.删除二叉搜索树中的节点

中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]:完成带返回值的递归算法、不带返回值+记录前一个节点信息的递归算法、带前一个节点信息的迭代算法。对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。:基本沿用普通二叉树的最近公共祖先算法,但对于二叉搜索树可以做出一定的性能优化。

2024-10-24 22:20:27 741

原创 代码随想录算法训练营第十六天 | LeetCode530.二叉搜索树的最小绝对差、LeetCode501.二叉搜索树中的众数、LeetCode236.二叉树中的最近公共祖先

中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(:究其原因是首先中序遍历到最左侧叶子节点不知道咋加入到数组里,然后最后的节点如果和前一个节点相等,如何能够在自然结束的时候再进行一次处理。:遇到在二叉搜索树上求最值,差值之类的,可以把它想成在一个有序数组上求最值,求差值。:对于中序的处理,可以先纯碎将目光集中于计数,然后再根据计数的情况实时更新数组。给你一个含重复值的二叉搜索树(BST)的根节点。

2024-10-23 21:32:54 617

原创 代码随想录算法训练营第十五天 | LeetCode654.最大二叉树、LeetCode617.合并二叉树、LeetCode700.二叉搜索树中的搜索、LeetCode98.验证二叉搜索树

合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;:类似用数组构造二叉树的题目,每次分隔尽量不要定义新的数组,而是通过下标索引直接在原数组上操作,这样可以节约时间和空间上的开销。:实际上当前节点需大于左子树中的所有节点,小于右子树中的所有节点,我这样判断左右孩子是不对的。:前中后序遍历都可以,对于两颗树的处理的终止条件需要考虑,然后本题可以在遍历过程中保证同步。:递归,当前节点大于左孩子,小于右孩子,同时保证左子树是二叉搜索树,右子树是二叉搜索树。:给定二叉树的根节点。

2024-10-23 11:09:53 722

原创 代码随想录算法训练营第十四天 | LeetCode513.找树左下角的值、LeetCode112.路径总和、LeetCode113.路径总和ii、LeetCode106.从中序与后序遍历序列构造二叉树

可以使用前序遍历(当然中序,后序都可以,因为本题没有 中间节点的处理逻辑,只要左优先就行),保证优先左边搜索,然后记录深度最大的叶子节点,此时就是树的最后一行最左边的值。:录哥的代码首先是把路径求和转化为目标值的递减,叶子节点的处理在父节点的函数中完成,因此会有一个回溯的过程,而我的这种代码无需回溯。:层序遍历,记录每组出队的第一个元素,最后一层第一个元素就是二叉树最底层最左边的节点。:事实上我的代码没有回溯,也就是没有减值的过程,很奇怪,能正常运行,稀里糊涂的。是指没有子节点的节点。是二叉树的中序遍历,

2024-10-17 21:05:22 727

原创 代码随想录算法训练营第十三天 | LeetCode110.平衡二叉树、LeetCode257.二叉树的所有路径、LeetCode404.左叶子之和、LeetCode222.完全二叉树的节点个数

的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。:判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。:可先判断当前树是否为完全二叉树(一直向左遍历计算深度,一直向右遍历计算深度),再进行递归。:本想用层序遍历实现,但这也得立足当下,放眼后两个节点,非常复杂,遂直接看录哥代码。:普通二叉树通过遍历来统计节点数量,但完全二叉树节点数量为2。,返回所有从根节点到叶子节点的路径。

2024-10-16 22:02:11 530

原创 代码随想录算法训练营第十二天 | LeetCode226.翻转二叉树、LeetCode101.对称二叉树、LeetCode104.二叉树的最大深度、LeetCode111.二叉树的最小深度

求深度用前序遍历(中左右),求高度用后序遍历(左右中),而根节点的高度就是二叉树的最大深度,所以用后序遍历求高度来做本题。:想要用递归,然后递归函数是比较两个子树,但是每一层要比较的字数数量指数增长,不知道该怎么遍历,遂看录哥讲解。:修改递归取最小值的逻辑,当一侧子树为空,另一侧不为空的时候最小值应该是一侧。:递归,交换左右孩子,其实很像遍历,但稀里糊涂就写出了前序遍历,没有太理解。:实际上先求深度再求最大深度也行,用前序遍历方式,有待实现。,翻转这棵二叉树,并返回其根节点。需要复习并独立完成代码。

2024-10-16 12:26:34 820

原创 代码随想录算法训练营第十一天 | 二叉树递归遍历、迭代遍历、统一遍历、层序遍历

二叉树的遍历方式:深度优先遍历(前序遍历、中序遍历和后序遍历)、广度优先遍历(层次遍历)然后后序遍历和前序遍历存在以下转化关系: 中左右->中右左->左右中。二叉树的种类:满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树。二叉树的存储方式:链式存储(链表两个指针)、顺序存储(数组):就是要处理的节点放入栈之后,紧接着放入一个空指针作为标记。:借用指针的遍历来帮助访问节点,栈则用来处理节点上的元素。:不清楚怎么通过栈实现迭代遍历。:掌握递归遍历的算法。

2024-10-14 21:45:50 920

原创 代码随想录算法训练营第十天 | LeetCode150.逆波兰表达式求值、LeetCode239.滑动窗口最大值、LeetCode347.前K个高频元素

题型关键理念栈实现队列双栈协同队列实现栈循环转圈有效的括号、删除字符串中的所有相邻重复项、逆波兰表达式求值栈处理相邻元素滑动窗口最大值自定义单调队列前K个高频元素小顶堆栈与队列总结。

2024-10-11 23:08:44 840

原创 代码随想录算法训练营第九天 | LeetCode232.用栈实现队列、LeetCode225.用队列实现栈、LeetCode20.有效的括号、LeetCode1047.删除字符串中的所有相邻重复项

我想到了第一个栈用来存元素即可,但第二个栈怎么取元素没太想明白,本来是打算每次pop的时候把第一个栈中的元素推到第二个栈中,然后pop一次第二个栈,在推回到第一个栈,但是过于复杂,遂直接看代码随想录。两个栈可以进行联动,第一个栈放进元素,第二个栈用于取元素,调用push的时候如果第二个栈为空了就把第一个栈的元素全部push进第二个栈中。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的,vector,deque,list均可。:用栈实现队列的方法,注意代码的复用。

2024-10-10 22:36:32 870

原创 代码随想录算法训练营第八天 | LeetCode151.翻转字符串里的单词、卡码网55.右旋转字符串、LeetCode28.实现strStr()、LeetCode459.重复的子字符串

题型关键理念反转字符串首尾指针反转字符串IIfor循环一段一段处理替换数字预先给数组扩容带填充后的大小,然后在从后向前进行操作翻转字符串中的单词整体翻转再局部翻转、前后指针删除空格左旋、右旋字符串整体翻转再局部翻转strStr()、重复的子字符串KMP字符串总结。

2024-10-09 22:58:21 817

原创 代码随想录算法训练营第七天 | LeetCode344.反转字符串、LeetCode541.反转字符串II、卡码网54.替换数字

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。先创建一个空字符串,直接遍历一遍字符串,然后里面的字符如果是字母,直接push_back,如果是数字,则加上"number"这个字符串。:申请一个新的字符数组就违反了题目的要求,然后突然想到反转字符串其实就是首尾两个字符进行交换,双指针法!:很复杂地先计算组数,然后计算剩余字符数,然后一组一组处理,剩余字符再处理,最后拼接在一起。:通过i+=2k可以分段处理,不要思维定势!

2024-10-08 21:57:05 1043

原创 代码随想录算法训练营第六天 | LeetCode454.四数相加、LeetCode383.赎金信、LeetCode15.三数之和、LeetCode18.四数之和

题型关键理念有效的字母异位词array赎金信array两个数组的交集快乐数两数之和四数相加II单数组内部三数之和、四数之和、N数之和N-1层循环+双指针哈希表主要掌握三种数据结构+想到要判断集合中是否有某个元素就选择哈希表哈希表专题总结。

2024-10-07 23:52:36 886

原创 代码随想录算法训练营第五天 | LeetCode242.有效的字母异位词、LeetCode349.两个数组的交集、LeetCode202.快乐数、LeetCode1.两数之和

其实我想到了字母的特殊之处(连续的ASCII码),也想到了用数组存储字母出现的次数,进行比对的过程我想用两个数组的,但不太清楚c++怎么处理字符串(脑中里全是strcat之流,纯纯被c语言毒害了),再者不清楚c++的其他map、set的写法,索性先看录哥的讲解再写代码。:第一想法是以数组为哈希表的载体,数组nums1中出现过的数记为1,然后再遍历一遍nums2,找到记为1的放在集合中,即为交集。:c++查询字符串可以通过括号下标来索引、两字符相减可以得到ascii码的差、在原数组上进行操作可以直接比对。

2024-10-06 22:51:56 741

原创 代码随想录算法训练营第四天 | LeetCode24.两两交换链表中的节点、LeetCode19.删除链表中的倒数第N个节点、面试题02.07.链表相交、LeetCode142.环形链表II

题型关键理念移除链表元素虚拟头节点设计链表(增删改查)虚拟头节点翻转链表双指针两两交换链表中的节点虚拟头节点操作多个元素删除链表中倒数第N个节点快慢指针链表相交指针对齐判断链表是否有环以及入口节点快慢指针链表最大的特点是在内存中是离散分布的,通过指针将其串联起来,导致其增删改操作比较简单,复杂度为O(1),而查询操作需要从头开始遍历一遍,复杂度为O(n)。相较于数组,后者增删操作比较复杂,需要整体的移动,复杂度为O(n),而改查操作比较简单,复杂度为O(1)。

2024-10-02 17:45:37 1725 1

原创 代码随想录算法训练营第三天 | LeetCode203.移除链表元素、LeetCode707.设计链表、LeetCode206.反转链表

但我总觉得这样浪费了空间,并且题目还说了可以用递归的方式去实现,因此花了近四十分钟去想递归的解法,之前算法课我觉得已经通透地掌握了递归,也就是把解法建立在递归的函数之上,但这道题一直没想出来咋递归而且看了代码随想录的递归之后还是百思不得其解,信心受挫!代码随想录提供的改变链表的next指针的指向,直接将链表反转的算法很有启发,在此基础上完成了递归的算法,但我一直无法理解这种递归,感觉像是为了递归而递归。:真正实现的时候由于c++不够熟练,花了相当长的时间去实现算法,但其实思路和代码随想录一致。

2024-10-01 16:51:48 1949 1

原创 代码随想录算法训练营第二天 | LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II、区间和、开发商购买土地

LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II、区间和、开发商购买土地

2024-09-28 19:31:02 896

原创 代码随想录算法训练营第一天 | LeetCode704.二分查找、LeetCode27.移除元素、LeetCode977.有序数组的平方

LeetCode

2024-09-26 20:15:16 879 1

原创 普通用户下使用sudo命令实现ubuntu 20.04.6 LTS 将python3.8 变更为 python3.10并更新pip

普通用户下使用sudo命令实现ubuntu 20.04.6 LTS 将python3.8 变更为 python3.10以及将pip从20.0.2更新为23.3.2

2024-01-22 17:15:22 3039 4

空空如也

空空如也

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

TA关注的人

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