自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 问答 (1)
  • 收藏
  • 关注

原创 代码随想录|动态规划 647. 回文子串 516.最长回文子序列

如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。思路:布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。那么dp[i][j]一定是取最大的,即:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);加入s[j]的回文子序列长度为dp[i + 1][j]。

2025-02-05 15:42:37 340

原创 代码随想录|动态规划 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离

那最后当然是取最小值,所以当word1[i - 1] 与 word2[j - 1]不相同的时候,递推公式:dp[i][j] = min({dp[i - 1][j - 1] + 2, dp[i - 1][j] + 1, dp[i][j - 1] + 1});因为 dp[i][j - 1] + 1 = dp[i - 1][j - 1] + 2,所以递推公式可简化为:dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);

2025-02-04 12:09:31 741

原创 代码随想录|动态规划1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列

t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1];如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。所以dp[0]=nums[0]

2025-01-31 11:22:14 710

原创 代码随想录|动态规划 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

但dp[i][0] 和dp[0][j]要初始值,因为 为了方便递归公式dp[i][j] = dp[i - 1][j - 1] + 1;dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。即当A[i - 1] 和B[j - 1]相等的时候,dp[i][j] = dp[i - 1][j - 1] + 1;根据dp[i][j]的定义,dp[i][j]的状态只能由dp[i - 1][j - 1]推导出来。718. 最长重复子数组。

2025-01-29 23:43:59 369

原创 代码随想录| 动态规划188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

/状态:即延续前一天持有股票状态,或者冷冻期过后马上买的状态,或者冷冻期后间隔很久(即是dp[i][1] 保持卖出股票)才买入股票选最大的。使用二维数组 dp[i][j] :第i天的状态为j,所剩下的最大现金是dp[i][j]

2025-01-28 14:31:33 540

原创 代码随想录|动态规划 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III

也有两种方式:一种是当天不卖出股票而是之前就已经卖出过的(dp[i-1][1]),一种是当天卖出股票,最后得到的利润就是之前股票买入的价格(是负数)加上当前卖出的价格就是所得最大利润(price[i]+dp[i-1][0])dp[i - 1][0]为0。一定是选最大的,所以 dp[i][1] = max(dp[i-1][0] - prices[i], dp[i - 1][1]);那么dp[i][1]究竟选 dp[i-1][0] - prices[i],还是dp[i - 1][1]呢?

2025-01-26 13:33:48 591

原创 代码随想录|动态规划198.打家劫舍 213.打家劫舍II 337.打家劫舍III

思路:考虑两种情况,一种是只考虑头元素,一种是只考虑尾元素。还有一种是考虑不包含首尾元素,因为前面说的两种情况都把中间的元素考虑进去了,所以这种情况是可以不用写出来的。这里的dp[i-1]指的是延续上一次偷房间的总金额,不是指偷dp[i-1]的房间。dp[i-2]+nums[i]指的是偷当前房价,因为由题目知道,不能偷相邻的房间,所以要在第i-2的基础上偷。思路:这题是用了二叉树,和上面的两个题目有些不同,他们的相邻指的是节点之间相邻。当前节点,则找偷或不偷左节点的最大金钱+偷或不偷右节点的最大金钱。

2025-01-25 12:24:25 273

原创 代码随想录|动态规划 322. 零钱兑换 279.完全平方数 139.单词拆分

但是在初始化dp数组时,要初始化为最大的值,因为从题目知道,要得到的是最少的硬币个数,所以在取min时,为了防止会被初始值覆盖的风险,得把初始值设置为最大值。if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true (j<i)因为在字典集中,同样的单词组,如果顺序变了,它最后得到的字符都是不一样的,所以强调排列数。因为题目是求硬币个数,所以要把当前的硬币加上,就直接加1即可。递推公式:dp[j]=min(dp[j-conis[i]]+1,dp[j]);

2025-01-24 11:34:19 266

原创 代码随想录|动态规划 518. 零钱兑换 II 377. 组合总和 Ⅳ

思路:其实这题的思路和上一题差不多,只是要先遍历背包容量,在遍历物品数量(即求排列数),只是在最终结果上由差别,就是这里的排列,只要顺序不同,就当成一个新的集合。二维数组的遍历形式两层for循环可以调换 dp[i][j] = dp[i - 1][j] + dp[i][j - coins[i]]一维数组的形式,先遍历物品,再遍历背包容量.得到的是组合数,遍历顺序不能换 dp[j]+=dp[j-coins[i]]518. 零钱兑换 II。377. 组合总和 Ⅳ。

2025-01-24 01:10:18 205

原创 代码随想录|动态规划 416. 分割等和子集

用一维,dp[j]=Math.max(dp[j],dp[j-nums[i]]+nums[i])在二维数组中,各行的数据是隔离开来的,所以背包容量部分,从后往前和从前往后都是一样的。背包容量部分的遍历只能从后往前遍历,不然会出现不符合01背包的物品只能用一次的规则。知道dp二维数组中i和j的关系以及含义,i是当前要放的物品,j就是当前背包的容量。容量为j的背包所能得到的最大价值为dp[j]一维数组每次都是重复利用,而且是有更新的。思路:看成价值和重量是相同的。背包和物品的遍历可以互换。

2025-01-21 20:57:55 202

原创 代码随想录|动态规划 62.不同路径 、 63. 不同路径 II

即当遇到障碍物时,当前点设置为0,而且初始化时,如果dp[i][0],dp[0][j]的某一个位置出现障碍物,其之后的的位置都是不能通过的,所以都是0,此时判断出此条件后,推出初始化循环即可。这里首先初始化,因为由题目只,只能向右或向下移动,所以dp[i][0]和dp[0][j]都是只有一条路径的。又因为dp[i][j]存储的是到达当前位置的总路径数,所以是当前位置的相邻格子的总路径数相加得到。所以初始化为dp[i][0]=1,dp[0][j]=1;思路:本题还是靠动态规划的本质,其实和上一题。

2025-01-19 11:49:20 249

原创 代码随想录|动态规划 509. 斐波那契数 、70. 爬楼梯 、746. 使用最小花费爬楼梯

这里初始化dp[0],dp[1],赋值都为0,因为由题目知道第一步不花费,所以第1和第2台阶的都是0。因为可以只维护两个遍历即可,所以设置一个中间变量是可以的,并更新即可。而斐波那契是从dp[0] dp[1]开始初始化,所以n

2025-01-18 11:36:51 308

原创 代码随想录| 56. 合并区间 、 738.单调递增的数字 、 968.监控二叉树

但是从前到后遍历的话利用上次比较的结果来计算,因为从高位开始计算,得到的结果有些时候得不到是递增序列,如332,最后变成的只是329,因为3==3,所以就不变,然后3!空节点也不能是有摄像头的状态,这样叶子节点的父节点就没有必要放摄像头了,而是可以把摄像头放在叶子节点的爷爷节点上。重新定义一个二维数组,如果重叠就合并重叠区间,把合并后的区间放到新的二维数组中,如果没有重叠直接放到新的二维数组中。}else{//其他情况,即两边的其中一边有相机或者两边都有相机,标识当前节点是有覆盖的。为什么要加“9”呢?

2025-01-16 15:02:24 573

原创 代码随想录 452. 用最少数量的箭引爆气球、435. 无重叠区间 、 763.划分字母区间

这里先按气球区间的左边界从小到大排序,由题目可知 xstart<=x<=xend,所以要看当前气球区间的左边界和上一个气球有边界,如果它们不是紧挨着的,就发射的箭数+1;思路:左边界排序,然后找当前区间的左边界比上一个区间的右边界小的就删除,并更新两个重叠区间的最小右边界,因为取最小右边界,这个最小右边界作为当前区间的右边界和下一个区间的左边界比较,如果和最小右边界都重叠了,肯定两个区间都重叠了,所以也是要删除该重叠区间的。然后再判断后面的元素区间是否满足如上所述的情况。452. 用最少数量的箭引爆气球。

2025-01-15 15:22:34 369

原创 代码随想录算法训练营| 134. 加油站 、 135. 分发糖果 、860.柠檬水找零 、 406.根据身高重建队列

思路:如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。每个加油站的剩余量rest[i]为gas[i] - cost[i]。i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。

2024-10-25 02:02:16 389

原创 代码随想录算法训练营| 122.买卖股票的最佳时机II 、 55. 跳跃游戏 、 45.跳跃游戏II 、 1005.K次取反后最大化的数组和

思路:本题其实就是去找正数相加,即找当天股票价格和前一天股票价格相减,如果大于零表示可以赚取利润(就可以抛售),如果为负数就没有利润就不能抛售。

2024-10-24 01:09:38 218

原创 代码随想录算法训练营|455.分发饼干 、376. 摆动序列 、53. 最大子序和

思路:我们这里的思路是用最大量的饼干数看看是否满足食量最大的小孩,如果不满足则 index--继续遍历第二食量的小孩,以此类推,如果最大量饼干也满足的当前遍历到的食量的小孩,则饼干数就变为第二大量的饼干,再与当前食量的小孩进行比较,每满足一次条件,count++(即最后可以分得的小孩数)

2024-10-22 23:59:52 302

原创 将SpringBoot项目部署到linux服务器使得本地可以访问

是不行的,因为你还没有在服务器上开放端口,以及在对应的服务器上的linux(我用的是Ubuntu)上开放端口。首先我们要先从本地打包jar文件上传到linux中,这些的步骤可以参考其他打包上传的博客哈。然后对应访问 公网ip+端口+对应访问位置(即自己定义的controller类的接口)因为我这个jar包中是8080端口,所以先进行防火墙查看端口是否开放了。然后在直接的服务器上开发8080端口,即在入方向规则中开放8080端口。进行如上步骤后,就可以打开对应jar包上的端口了。

2024-10-18 02:02:03 272

原创 执行jar文件no main manifest attribute错误

问题是由于maven打包时候没有指定主启动程序,或下方配置中多余true配置跳过主程序配置。对应找到build中的所有有关true的删除,再重新打包即可。

2024-10-18 01:48:07 1001

原创 代码随想录算法训练营|491.递增子序列 、46.全排列 、47.全排列 II

思路:其实这题的思路和前面子集||中的有点相似,但是又有很大不同,这里的元素是不能进行排序的,因为要求的就是递增子序列,所以不能排序,而且还要判断当前组是否是递增的,判断是否是递增就用当前元素是否比path(存的每一个组合)的最后的一个元素大,如果小于就直接跳过当前循环。而hs就是记录当前层中剔除重复元素的,用于去重逻辑中,层递归中出现了同一个元素,第二次遇到就会直接跳过当前循环。注意:这里要取两个及以上的组合来。

2024-10-16 02:15:32 300

原创 代码随想录算法训练营|93.复原IP地址 、 78.子集 、 90.子集II

思路:这题的思路其实就是判断地址是否合法,在每三个字符见就进行合法判断,当pointNum(即分割点)为3的时候,表示已经到达地址的最后一部分,则直接判断最后一部分是否合法,其他部分就在回溯过程上进行判断是否合法,这里主要的是pointNum这个分割点,而且每次合法后要在这个合法串上加上 “,”。startIndex是用于你要在哪个地方开始遍历的初始值。

2024-10-14 02:08:12 252

原创 代码随想录算法训练营| 39. 组合总和 、 40.组合总和II 、 131.分割回文串

思路:这题的思路其实和上一题的组合总和|||思路差不多,只是这里的元素是可以重复使用的,所以这里的剪枝操作也和上一题组合总和|||有点不一样,以及传入参数中startIndex(idx)的值变化了之外,其他的代码是差不多的。首先先排序,是为了后面剪枝方便,然后res存储结果集,path存储组合,candidates是排序后的数组,sum是总和,startIndex(idx)就是当前要遍历的数组的位置。

2024-10-11 01:53:14 352

原创 代码随想录算法训练营| 77. 组合 、 216.组合总和III 、 17.电话号码的字母组合

思路:这道题目用到了回溯的算法,因此回溯三部曲是有必要的,同时我们要做一个剪枝操作减少递归次数。1.递归函数的返回值以及参数2.回溯函数终止条件3.单层搜索的过程剪枝操作n - (k - path.size()) + 1 是表示至多起始位置,这样就会减少递归次数。k-path.size()其实就是一个判断当前还需要几位数值才满足题目条件的一个减法。

2024-10-10 00:58:34 488

原创 代码随想录算法训练营| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树

思路:这题其实就是删除不符合上下边界的节点。注意:这里删除不符合上下边界节点时,这个不符合上下边界的节点的左或右子树可能存在符合上下边界的节点,所i有每次比较完之后,要继续遍历其左或右子树,直到把所有不符合上下边界的节点都删除为止。

2024-10-09 00:39:03 409

原创 代码随想录算法训练营| 235. 二叉搜索树的最近公共祖先 、 701.二叉搜索树中的插入操作 、450.删除二叉搜索树中的节点

这里主要是利用了二叉搜索树的特点,这里因为二叉搜索树的特点,左边节点的值比根节点小,右边节点的值比根节点大。所以当当前节点的值大于p q时,直接遍历当前节点的左边节点,当当前节点的值小于p q 时,直接遍历当前节点的右边节点;思路:这题其实就是利用二叉搜索树的特点,当要插入的节点大于当前节点值时,就遍历其右子树,当插入节点小于当前节点值时,就遍历其左子树。若遍历的的子树为空的时,表示找到了合适的插入位置,则新建树,并返回给上一层,然后层层返回,就把新二叉搜索树给构建好了。思路:思路尽在代码中!

2024-10-03 00:14:14 291

原创 代码随想录算法训练营|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数 、 236. 二叉树的最近公共祖先

递归结束条件,这个条件把所有情况都涵盖在里面了,因为无论你p q在根节点左右边还是只在一边,又或者p以q为父亲的情况,都是满足的,到下面后序遍历处理中间节点的情况的时候(left和right都不为空),直接返回root(即p q共同的祖先),其他如果是p q在同一边(即通一条子树下),在中间节点处理过程中也是直接返回left或right,这样等回溯到上一层节点时,操作也是一样的。这题用到了后序遍历的方式,重要部分是在中间节点时的操作,因为涉及到回溯,所以进行 if else判断时,要一层层回溯。

2024-10-01 23:30:57 426

原创 代码随想录算法训练营| 654.最大二叉树、 617.合并二叉树 、 700.二叉搜索树中的搜索 、 98.验证二叉搜索树

构造二叉树我们用前序遍历是最好的。思路:这题其实就是把两个二叉树对应位置上的数值相加成为一个新的节点,若其中一个位置空的,另一个位置不为空,则直接返回不为空的那个树的节点即可。若不满足终止条件,就把两个二叉树节点值相加,成为一个新的节点。如果当前节点值大于val,就继续遍历当前节点的左子树,如果当前节点值小于val,则继续遍历当前节点右子树。思路:其实这题的思路就是利用中序遍历的方式,把树中所有的值都遍历出来,看看它是否有序,若前一个节点值大于当前节点值,就表示不是递增有序的,就直接返回false即可。

2024-09-29 23:30:31 405

原创 代码随想录算法训练营| 找树左下角的值 、 路径总和 、 从中序与后序遍历序列构造二叉树

找到下标之后,就是分割后序中序数组,通过index找到左中序右中序,以及左后序和右后序,重点注意右中序,因为涉及数组溢出和超出数组范围的情况(主要是因为在中序数组中间会出现要构建子树的情况);思路:这里寻找最左下角的值,其实用前中后序都是可以的,只要保证第一遍历的是左边开始就可以。当遇到叶子节点时而且当前深度比最大深度还大则更换最大深度为deep并存储当前节点的值(这个时候说明遇到的就是当前深度下最左边的叶子节点,但不一定是最最大深度的最左边的叶子节点,还要继续往后遍历)。

2024-09-29 03:07:12 469

原创 代码随想录算法训练营| 110.平衡二叉树、 257. 二叉树的所有路径 、404.左叶子之和、 222.完全二叉树的节点个数

然后先把当前元素值添加到paths中,判断当前节点左右子树是否为空,为空,则表示遇到了叶子节点,则把当前的paths数组中的所有的元素放到res中,存储成为一个路径,如果没有遇到叶子节点,则继续遍历,若左节点不为空,则继续遍历左节点,遍历完成就回溯到上一个节点(在paths中),若右节点不为空,则遍历右节点,遍历完成就回溯到上一个节点(在paths中)思路:这题求左叶子的和,用后序遍历的方式最合适,因为就是相当于找到了当前节点左右子树对应的左叶子节点值的和,然后返回给当前节点,再一层层往父节点返回。

2024-09-28 00:23:15 478

原创 代码随想录算法训练营|226.翻转二叉树 、 101. 对称二叉树、 104.二叉树的最大深度、 111.二叉树的最小深度

这里只是取最小值是不正确的,因为一旦有一个节点的左或右节点出现了空,此时这个位置成为了最小值,但是不符合题意的,题意是到叶子节点的最小深度。首先交换当前节点的左右子节点,然后递归当前节点的左右子节点(相当于到了子节点还是做同样的操作),知道所有节点遍历完了,就完成了翻转,返回root即可。思路:这题的就是区分高度和深度的题目,不过也可以用求高度的方法求得(即求根节点的高度即可,这个就是用到了后序遍历),求深度就是从根节点开始遍历,直到找到最深的叶子节点即可(相当于前序遍历),这里用前序遍历的方式解题。

2024-09-27 02:05:57 425

原创 代码随想录算法训练营||二叉树

思路:层序遍历就是把二叉树中一层一层的存储起来,这里我们用队列的方式来暂时存储每一层的元素(主要用于while循环时,size大小的固定),然后添加到一个一维数组中,最后以二维数组的方式就可以得到每一层的数据了。思路:其实递归方式的前中后序遍历的方式都差不多,区别是在父节点的遍历时间。

2024-09-24 18:21:08 311

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

思路:逆波兰式其实就是模仿后续遍历的方式,只要理解了后序遍历,逆波兰式就很好解决了。我们这里用栈来处理,当遇到运算符号时,就取栈中的前两个元素与这个运算符号做运算,否则则把这个字符转换为int,加入到栈中。最后栈中留下来的值就是最终的值。

2024-09-24 16:59:37 164

原创 set-ExecutionPolicy RemoteSigned 提示不是内部或外部命令,也不是可运行的程序或批处理文件

这个错误一般发生在使用命令提示符或者PowerShell窗口中找不到set-ExecutionPolicy RemoteSigned。如果你想在命令提示符或者PowerShell窗口运行set-ExecutionPolicy RemoteSigned,你需要搜索打开Window PowerShell ISE,并以管理员身份打开,输入。然后就可以在你的编译器上运行脚本不能运行的操作了。

2024-09-23 01:34:28 1239

原创 代码随想录算法训练营| 232.用栈实现队列 、 225. 用队列实现栈 、 20. 有效的括号 、 1047. 删除字符串中的所有相邻重复项

思路:设置一个栈,当遍历字符串时,如果遇到左括号,把对应的右括号放入栈中;当字符串还未遍历完,但是栈已经空了则返回false,如果遇到的是右括号,但是与栈中的栈顶的右括号不匹配,则返回false,如果与栈顶的右括号匹配,则删除栈顶元素,直到字符串遍历完。思路:这题的思路就是用两个栈来实现队列的输出,因为队列是先进先出原则,所以当有元素如队列时,把这些元素加入到输入栈stackIn中,如果要输出的时候,要先判断输出栈stackOut是否有元素,如果有元素直接输出,如果没有元素就把输入栈中的。

2024-09-21 12:03:31 277

原创 代码随想录算法训练营|151.翻转字符串里的单词 、卡码网:55.右旋转字符串

现在重头戏就是反转字符串,首先是先反转整个字符串,反转整个字符串后,相当于把尾部的字符移到了头部,然后就是部分反转,因为把尾部迁移到了头部,所以把前面字符反转即反转 0~n-1,然后再反转 n~len-1;思路:这道题目的整体思路就是先把该字符串中首尾以及中间多余的空格去掉,首尾空格可以通过while循环判断,设置一个存储字符串的新变量,中间的多余空格则是当遇到当前位置是空格时且新变量当前位置不是空格时,把当前遇到的空格加入到新变量中否则是不加入的,这样就保证了每个单词之间就只有一个空格了;

2024-09-20 12:40:00 268

原创 代码随想录算法训练营|344.反转字符串、541. 反转字符串II、54.替换数字

思路:判断字符串s中是否有数值出现,如果有数值就len+5(这里加5是因为本身字符串的数值占一个位置,而number是六个位置,最终加了五个位置上去),这里len最终存储的是加入number后的长度。然后设置要给res数组,存储最终加入number后的字符串;先把原来字符串s中的元素加入到数组res中,然后循环,设置i和j,i指向旧数组的末尾位置,j指向的是新数组的位置,判断当前位置是否是数值,如果是,则新数组位置的j--,并存入number元素中的r字符,以此类推;

2024-09-20 00:49:52 285

原创 代码随想录算法训练营| 454.四数相加II 、 383. 赎金信 、 15. 三数之和 、 18. 四数之和

到了这里就是最重要的一步,前面已经把nums[i]的值去重了,这里就要把nums[left],nums[right]的值也要去重,因为left是前进的,right是后退的,所以当nums[right]==nums[right-1]时,right--,过滤掉下一个要加的nums[right]值,同理left则是 当nums[left]==nums[left+1]时,left++。因为题目是找一个数组中三个数的和,而且同一个位置的数不能重复出现(就是题目中的i,j,k三个位置),但是不同位置的数值可以重复。

2024-09-19 01:26:18 1007

原创 下载nvm 用nvm下载nodejs教程 供参考(windows版本)

这里当输入 nvm list available 时可能会没有显示版本后,而是报错,这个时候我们要找到nvm安装路径下的setting.txt,加入如下两个镜像即可。NVM_HOME 和 NVM_SYMLINK路径如果没有自动配置,就自行配置,NVM_HOME 和 NVM_SYMLINK的路径在上面已经标出,改成自己的安装路径即可。如上的 NODE_PATH是要自己配置的,NVM_HOME 和 NVM_SYMLINK是安装nvm时配置好的。当安装多个版本后,找到你想切换的版本,写如下代码。

2024-09-18 14:28:30 1519

原创 右键文件夹加入“通过xxx打开”

这里我们以webstorm为例。

2024-09-18 13:33:31 381

原创 代码随想录算法训练营| 242.有效的字母异位词 、 349. 两个数组的交集 、 202. 快乐数 、 1. 两数之和

否则就是知道n为1为止,退出循环,返回true(即n==1)set1用于存储nums1的元素值,然后遍历nums2,查看nums2中的元素是否在set1中,如果在set1中,则用set2存储。设置一个hash数组,用于记录出现字母的次数,先由s字符串开始,记录hash++,然后是t字符串,记录hash--,最后循环26次,判断hash的每个位置是否都为0,如果不是,就返回false即可。思路:这道题目用到的是map,map用于存储元素的值和下标,key存储nums中的值,value哟女友存储值对应的下标。

2024-09-18 00:59:56 352

空空如也

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

TA关注的人

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