自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 53. 最大子数组和/56. 合并区间/189. 轮转数组

当前元素加入进来时,如果和。

2024-04-27 14:55:45 440

原创 239. 滑动窗口最大值/76. 最小覆盖子串

给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。滑动窗口的位置 最大值用单调队列处理,滑动窗口的加入元素和移除元素相当于队列的pop和push,找出最大元素相当于单调队列的中最大值,也就是队列的头元素(que.front())。下一步设计一个队列,包含出队、入队、寻找最大值的操作。

2024-04-26 12:00:07 811

原创 3. 无重复字符的最长子串/438. 找到字符串中所有字母异位词/560. 和为 K 的子数组

给定一个字符串s,请你找出其中不含有重复字符的的长度。3因为无重复字符的最长子串是 "abc",所以其长度为 3。。所以我们就可以采用滑动窗口去处理,对于判断重复用的数据结构为哈希集合(即C++中的在左指针向右移动的时候,我们从哈希集合中移除一个字符,在右指针向右移动的时候,我们往哈希集合中添加一个字符。由上面想法可以写出下面代码(个人走的弯路,不想看可以跳过)可以解出来,但是耗时太长没有利用好滑动窗口减少比对次数。

2024-04-19 11:51:32 687

原创 C++未定义标识符CWinApp等问题

解决办法:首先查看Vs2017安装的时候没有勾选这些选项,没有就勾选下载,问题应该能解决,如果没有解决,尝试引入相应头文件。问题:未定义标识符CWinApp、未定义标识符AfxWinInit、未定义标识符HMODULE。工具->获取工具和功能。

2024-04-17 21:44:36 206

原创 15.三数之和/42.接雨水

给你一个整数数组nums,判断是否存在三元组满足i!= ji!= k且j!= k,同时还满足。请你返回所有和为0且不重复的三元组。答案中不可以包含重复的三元组。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。参考之前的博客,注意一下双指针收缩时机。

2024-04-17 16:14:35 657

原创 128. 最长连续序列/283. 移动零/11. 盛最多水的容器

给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。4最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。注意这里要求是复杂度为n,所以双层forx循环暴力解法不可取。重新思考,当遍历到当前元素时,我们需要去寻找它的下一个数字,例如遍历到100去找101,这里肯定是没有错的,所以我们,例如对于1,2,3,4这四个元素而言,都是在一个序列中,显然从1开始寻找是最长的,其他三个都比1要短。

2024-04-09 15:00:42 410

原创 1. 两数之和/49. 字母异位词分组

题目:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出target的那整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。暴力解法两层循环解决,这里利用map可以使得时间复杂度变小,用目标值减去当前的数组元素,得到需要的值,再去map中寻找,没有就将当前值加入(值作key,下标作value),找到就输出下标和map中对应的值。

2024-04-08 18:42:12 384

原创 Failed to retrieve MSVC Environment from “...“C:\WINDOWS\system32\cmd.exe“ could not be started.

在系统环境变量path中配置Qt和安装的vs2017。

2024-03-13 14:51:36 358

原创 代码随想录算法训练营第四十一天|198.打家劫舍 ,213.打家劫舍II ,337.打家劫舍III

到第i个房间,dp[i]有两个来源,①不偷第i个房间,那金额就是和偷到上一个房间一样,dp[i]=dp[i-1];②偷第i个房间,由于相邻的房间不能偷,只能是从i-2个房间开始所以dp[i]等于dp[i-2]+num[i],最后取dp[i-1]和dp[i-2]+num[i]中最大值。dp[1]要不偷房间0,要不偷房间1,dp[1]=max(num[0],num[1])。这里相邻房间变成了父子节点,如果抢了当前节点,两个孩子就不能动,如果没抢当前节点,就可以考虑抢左右孩子。②尾房间在考虑范围,首房间不在。

2023-12-20 22:20:41 842

原创 代码随想录算法训练营第四十天|139.单词拆分,多重背包,背包问题

难点:递推公式和遍历顺序确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组递推公式总结遍历顺序总结:1.01背包二维dp数组01背包先遍历物品还是先遍历背包都是可以的,且第二层for循环是从小到大遍历。一维dp数组01背包只能先遍历物品再遍历背包容量,且第二层for循环是从大到小遍历。2.完全背包①如果求组合数就是外层for循环遍历物品,内层for循环遍历背包。②如果求排列数。

2023-12-09 21:16:04 861

原创 代码随想录算法训练营第三十九天|70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数

dp[j]同样有两个来源:①不加入当前硬币dp[j],②加入当前硬币,如果加入当前硬币,数量还要加一:dp[j-coins[i]]+1;首先这里每次跳的台阶层数可以重复,所以从前向后遍历,并且防止1,3和3,1这种情况算成一种,所以外层遍历容量j,内层遍历i。和之前目标和题目一样,dp[j]+=dp[j-value[i]],但是这题,value[i]也就是i的值,所以公式。dp[0]金额为0,所以dp[0]=0;很显然可以转换成背包问题,物品就是1到m,背包容量就是n,这里背包容量不固定,所以是一个。

2023-12-09 19:19:29 773

原创 代码随想录算法训练营第三十八天|完全背包,518. 零钱兑换 II ,377. 组合总和 Ⅳ

如果把遍历nums(物品)放在外循环,遍历target的作为内循环的话,举一个例子:计算dp[4]的时候,结果集只有 {1,3} 这样的集合,不会有{3,1}这样的集合,因为nums遍历放在外层,3只能出现在1后面!②加入物品1,首先容量得腾出位置来放物品1,所以3-weight[1],也就是容量变成1了,当j=1时,dp[1]=15(最大价值是15),再加上物品1的价值value[1]=20,所以。外循环目标数,内循环物品。就是组合,但是这里要求的是组合数量,所以dp数组里不是放价值,是放组合的数量;

2023-12-08 15:36:58 832

原创 代码随想录算法训练营第三十七天|1049. 最后一块石头的重量 II ,494. 目标和,474.一和零

这里有点绕,可以举例说明一下,例如有三个石头2,7,4,dp[9]和dp[10]其实都等于2+7,因为如果加上4,重量会超过我们要求的目标值10,实际上dp[9]到dp[12]都等于2+7,但如果目标值是13,dp[13]=2+7+4。获得dp[i][j]同样有两种方式,加入当前元素,dp[i-zero][j-one]+1,或者不加dp[i][j];注意如果数组[0,0,0,0,0],j=0时,以输入:["10","0001","111001","1","0"],m = 3,n = 3为例。

2023-12-07 17:09:16 829

原创 代码随想录算法训练营第三十六天|01背包问题 二维 ,01背包问题 一维 ,416. 分割等和子集

最好的结果就是分成两个子集和相等,既然和相等,那么子集的和就是总和的一半,也就是说,从nums数组种取出元素,能够满足和等于总和的一半,那么结果就是true。在使用二维数组的时候,递推公式:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);第i件物品的重量是weight[i],得到的价值是value[i]。最开始j=0时候,装不了物品。

2023-12-06 21:52:00 858

原创 代码随想录算法训练营第三十五天|343. 整数拆分,96.不同的二叉搜索树

上一步分析到j从1开始,但是dp[j-1]可能等于dp[0],所以我们初始化就是dp[0]=1,这样dp[1]=dp[0]*dp[0]=1;都在右子树上,所以以3为头节点,加上两个节点组成的二叉搜索数就等于dp[2],和以1开头一样;从例子3来看,有5个二叉搜索树,两个以1为头节点,两个以3为头节点,一个以2为头节点。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。​​​​​​​那么公式等于dp[i]=dp[j]*dp[i-j]。

2023-12-06 19:42:48 833

原创 代码随想录算法训练营第三十四天|62.不同路径,63. 不同路径 II

dp[i][j]=dp[i-1][j]+dp[i][j-1],如果遇到障碍怎么办,也就是当前i,j位置没有路径过来,递推直接跳过。每个位置也只能是从左边或者上面来,所以达到i,j位置,dp[i][j]=dp[i-1][j]+dp[i][j-1]。题目是求到达右下角多少不同路径,所以dp应该是二维数组dp[i][j],表示到达i,j坐标位置有多少条不同路径。首先i=0时,不管j等于多少,dp[0][j]都是等于1;同样j=0时,dp[i][0]都是等于1。1. 向右 -> 向右 -> 向下 -> 向下。

2023-12-03 01:58:02 995

原创 代码随想录算法训练营第三十三天|509. 斐波那契数 ,70. 爬楼梯 ,746. 使用最小花费爬楼梯

和爬楼梯类似,i层可以从i-1层爬一步到达,也可以从i-2层爬2步到达,dp[i]=dp[i-1]+dp[i-2],但这题不是求种类,而是花费,所以dp[i]应该是选dp[i-1]与dp[i-2]中的最小花费。转换成公式就是dp[i]=dp[i-1]+dp[i-2]。dp数组:0,0,1,2,2,3,3,4,4,5,6。上第0层台阶和上第1层台阶都不需要花费,dp[0]=0,dp[1]=1。dp[i]在这里表示到i层台阶有dp[i]种方法。相应的,i要从3开始。n=5时,dp数组为0,1,1,2,3,5。

2023-12-01 10:42:12 880

原创 代码随想录算法训练营第三十一天|435. 无重叠区间 , 763.划分字母区间 , 56. 合并区间

首先需要对intervals排序,以每个数组的右边界排序,再将第一个数组的右边界作为起始点,循环比较前数组的右边界和后数组的左边界。首先按照数组的左边界排序,再比较前数组后边界和后数组的前边界,如果包含,就就将后数组的后边界和前数组前边界当成合成的区间,如果不包含,当前数组没有其他数组包含它,直接加入结果数组。②两个数组存在包含关系。明确一点,如果前一个数组的右边界大于后一个数组的左边界就算重叠,利用这个统计不重叠的数组个数,剩下的就是重叠的个数。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

2023-11-29 21:26:50 788

原创 代码随想录算法训练营第二十八天|122.买卖股票的最佳时机II , 55. 跳跃游戏 ,45.跳跃游戏II

其次,考虑i如何更新,假设是例子[2,2,1,1,4],第二个2的范围到1,但是没到最后,那么i应该在1位置上,重新找最大范围,所以这里i每次遇到最大范围位置时候直接更新。由于每次都只能持有一只股,利润就是卖出股的一天减去买进股的一天,这里就可以拆分,例如第一天7买进,第三天5卖出,那利润等于-2,-2=1-7+5-1;例如情况[3,2,1,0,4,5]这种情况其实不算,虽然4的位置上可以跳到最后元素,但是它不在之前的跳跃范围内,在它之前没有数的跳跃范围可以覆盖它,所以。你也可以先购买,然后在。

2023-11-27 19:16:05 892

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

或者左差值小于0,右差值大于0;显然这种情况最长为二,但这里 一开始是只有上坡,所以假设前面添加一个元素,那么pre=0&&cur>0算一个顶峰,再加初始的一个元素顶峰,结果为二。使用贪心算法优化过程,如果当前“连续和”为负数的时候就立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。这里连续相同的数,其实就算一种,所以可以跳过相同的,那这里可以算pre>0&&cur=0或者。大尺寸的饼干可以满足小胃口也可以满足大胃口,为满足更多孩子,大尺寸饼干先拿给大胃口孩子。

2023-11-26 20:35:07 804

原创 代码随想录算法训练营第二十五天|491.递增子序列,46.全排列,47.全排列 II

对491题来说,不知道后面组合的元素是否在本层出现过,所以利用unordered_set判断出现过没有,每层它所能组合的数个数可能不相同(由于子序列不要递增,90题每次组合都知道数组中还剩下哪些数没有组和,所以开始就可以使用定义记录元素是否被使用,),也就相当于对本层能组合的数进行去重,所以每层都重新定义一个记录使用情况的数组。这题很简单没有组合结果去重,每个元素都可以组合,相同元素都可以,但是使用过的元素不可以再使用只能从剩下的元素中取。,因为每次都会重新定义,它的作用就是保持当前层不出现重复的数。

2023-11-23 19:59:27 814

原创 代码随想录算法训练营第二十四天|93.复原IP地址,78.子集 , 90.子集II

其次如果切割到最后都满足,字符串中“.”的个数应该等于3,并且字符串要合法,然后加入到结果数组中。这里参数首先需要字符串s,其次还需要一个参数start记录每次遍历的起点。首先需要两个数组,一个记录所有结果的二维数组r,一个记录单一结果的一维数组p;参数需要nums数组,一个记录遍历起点的start参数。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。的组合,首先每个树节点都算一个组合,其次树层需要去重。个数加一,然后递归遍历后面字符串,最后回溯,个数减一。首先将空元素加入r数组中,再循环。

2023-11-21 10:12:27 21

原创 代码随想录算法训练营第二十三天|39. 组合总和,40.组合总和II ,131.分割回文串

参数首先需要candidates和target,其次需要sum记录当前数字和,需要used数组,需要start记录每次开始位置防止每次结果出现重复使用的数字。,说明以当前数字为开始的组合,很有可能和上一个同样的数字的组合重复。首先确定组合内数字不去重,逻辑和之前题目类似,用过就不再用(这里用过不是说数字重复),每次递归都从当前数字的下一个数字开始,保证用过的数不出现(i+1);每次遍历开始都要将sum加上当前数字,当前数字进入数组p中,再递归,最后回溯,数组p弹出当前数字,所有结果就存储在r中。

2023-11-20 13:21:42 27

原创 代码随想录算法训练营第二十二天|216. 组合总和 III,17.电话号码的字母组合

单一结果的数组存储当前的字母,然后递归下一个字母集,例如当前字母是a,递归字母集就是n[3]='def'。最后如果没有满足添加的组合,回溯,单一结果的数组存储当前的字母。再看宽度,宽度每次跟digits里的元素值有关,如果是2-9,每次组合的数组长度就为3,如果是1或2,那数组就是空。首先和加上当前数字,再从剩下数字递归,如果结果不符合,需要回溯剪去当前数,和也要减去当前数。首先两个参数k和n,其次还要一个记录每次递归开始的记录参数,最后需要一个参数记录当前累加的和;的字符串,返回所有它能表示的字母组合。

2023-11-18 19:31:46 31

原创 代码随想录算法训练营第二十一天|回溯算法理论基础,77.组合

第一步:确定返回值和参数;回溯算法中函数返回值一般为void;回溯算法参数可能有很多,根据具体题目再确定。第二步:确定回溯算法终止条件;第三步:确定回溯搜索的遍历过程。for循环就是遍历集合区间,可以理解一个节点有多少个孩子,这个for循环就执行多少次。backtracking这里自己调用自己,实现递归。

2023-11-17 15:21:57 26

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

观察每个节点替换的数,可以知道每个节点的值都换成了中序遍历数组中从该节点起往后数组的累加数。例题中的中序遍历数组是[0,1,2,3,4,5,6,7,8],变成累加数之后变成[36,36,35,33,30,26,21,15,8],累加顺序刚好是从右向左,反中序遍历。第二步:当前接入符合边界范围的左右子节点,这里相当于剪去不符合要求的节点,但是子节点还要接上;树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。所以结果应当返回修剪好的二叉搜索树的新的根节点。

2023-11-16 13:30:12 23

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

中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(用vector统计map中元素,再排序,最后将频率最高的数记录在数值中,有可能有很多个。记住二叉搜索树的特点,如果用中序遍历,那么遍历结果一定是一个有序递增序列,所以统计最小差值就行。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。节点 5 和节点 1 的最近公共祖先是节点 3。差值是一个正数,其数值等于两值之差的绝对值。给你一个二叉搜索树的根节点。

2023-11-14 21:32:01 32

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

[3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 []。二叉搜索树有一个特性,左子节点小于父节点,父节点小于右子节点。思路:分别对两个树遍历,左节点和左节点比,右节点和右节点比。- 空数组,无子节点。

2023-11-13 19:17:33 26

原创 代码随想录算法训练营第十二天|144. 二叉树的前序遍历,145. 二叉树的后序遍历,94. 二叉树的中序遍历

思路:二叉树的前中后遍历都可以用递归来解决。解决:注意前中后三种遍历的顺序就可以。

2023-11-12 17:01:53 27 1

原创 代码随想录算法训练营第十六天|513.找树左下角的值,112. 路径总和,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树

②利用后序数组最后元素分割中序数组,分为中序左数组和中序右数组;③再利用中序左数组和中序右数组分割后序数组,分为后序左数组和后序右数组;从根节点开始依次搜索子节点,最后相加结果要等于总和,这里采用递归和回溯来判断是否接近于目标值。②如果左右子节点都是叶节点但和不是目标值,返回false;这里和上题类似,用前序和中序确定二叉树,前序是从前序数组第一个元素分割。这里找左下角的值,要满足两个条件,一是最底层,二是最左边。,后序分割则不需要,根据中序左数组和中序右数组分割就行。中序分割和后序分割的区别,

2023-11-11 20:11:35 33 1

原创 代码随想录算法训练营第十四天|104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。首先要判断一个节点的左右子孩子的深度是否一样,一样说明以该节点为根节点的二叉树是满二叉树,如果不一样就分别在判断以左右子孩子为根节点的二叉树是否是满二叉树。采用递归方式,求一个节点的深度,先求左子树的深度,再求右子树深度,最后取左右子树最大深度,再加上自身深度1就是该节点的深度。注意这里最小深度的定义,必须是到叶子节点的最短路劲上的节点数量。叶子节点是指没有子节点的节点。

2023-11-09 20:05:24 28 1

原创 代码随想录算法训练营第十三天|102.二叉树的层序遍历,226.翻转二叉树,101. 对称二叉树

先让二叉树的顶点进队,出队时将其左子节点和右子节点入队(不为空),后面所有节点在出队之后都将其左右子节点入队。这里需要两个数组,一个二维数组记录所有层遍历的结果,一个一维数组记录当前层的结果。采用递归方式,递归的原则就是①和②,当然在递归之前需要判断左右子节点的其他情况。解决:这里需要先对节点遍历,再交换,采用前序遍历和后序遍历都可以。这里观察一下对称的要求,一个节点的左右子节点要相等;,翻转这棵二叉树,并返回其根节点。左子节点的左节点和右子节点的右节点。左子节点的右节点和右子节点的左节点。

2023-11-08 10:45:19 30 1

原创 代码随想录算法训练营第十一天|239. 滑动窗口最大值,347.前 K 个高频元素

pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。首先需要统计频率前k高的元素,这里可以采用map来统计每个数出现的次数.然后采用堆来进行排序,由于堆每次弹出元素都是堆顶,所以这里采用小顶堆,让前k个大的数保留在队中。的滑动窗口从数组的最左侧移动到数组的最右侧。

2023-11-06 17:10:35 21

原创 代码随想录算法训练营第十天|20. 有效的括号, 1047. 删除字符串中的所有相邻重复项 ,150. 逆波兰表达式求值

例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。遇到左括号直接让其对应的右括号进栈,如果遇到右括号和栈顶元素比较,1.左括号多了,说明最后栈中没有和右括号匹配的左括号,2.右括号多了,栈没有元素了,但是有剩余字符串,3.中间括号不匹配,就是出栈元素和右括号不相等。依次进栈,进栈之前判断入栈元素和栈顶元素是否相同,最后将栈里元素出栈,就是剩下字符串,但顺序相反需要反转一下。在 S 上反复执行重复项删除操作,直到无法继续删除。

2023-11-05 21:44:16 25 1

原创 代码随想录算法训练营第九天|232.用栈实现队列,225. 用队列实现栈

队列的元素是先进先出,用队列来实现的话,进队就相当于进栈,出队应该让栈里元素先出栈,再进栈,最后出栈,就可以实现先进先出,所以这里需要两个栈,一个输入栈,一个输出栈。栈是先进后出,用队列实现的话,就相当于队列最后进队的元素需要先出队,这里用一个队列记录最后元素前的所有元素。先让原始队列出队放入到备份队列中,最后一个元素出队,返回;再让备份队列元素出队进原始队列。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(先将输入栈中元素出栈,再放进输出栈,最后输出栈中元素出栈。

2023-11-03 11:24:32 29

原创 代码随想录算法训练营第八天|字符串总结,双指针法,KMP算法

https://www.processon.com/v/654322ea94ee25571ada9132https://www.processon.com/v/6543596620d3411d2e47ff49 KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。 前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。 前缀是指不包含最后一个字符的所有以第一个字符开

2023-11-02 16:47:10 36

原创 代码随想录算法训练营第七天|344. 反转字符串,541. 反转字符串II,122. 路径加密 , 151.翻转字符串里的单词 , 剑指Offer58-II.左旋转字符串

' ',就s[slow]=s[fast],再移动slow和fast,s[fast]=' '停止,除了slow等于0时候,每次s[fast]!=' '时,都要先补充空格(s[slow]=' '),slow再向右移动一格,作为下次填充单词的起点。先反转字符串,两端指针向里缩进,依次交换就可以;再局部反转回单词,从第一个字母开始到空格前一个字母,就是要反转的单词,再移动起点继续反转单词。可以用快慢指针,快指针指向字母就加入慢指针,如果快指针遇到空格,慢指针就自己补充一个空格,再让快指针移动,遇到字母再加入。

2023-11-01 15:11:30 49

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

这题是上一个题目的进化,四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况。k从0开始,i从k+1开始,left从i+1开始,right从最后开始,同样先对数组进行排序,如果nums[k]>0和nums[k]+nums[i]>0这两个情况出现,直接退出。尝试用哈希表写不下去,时间也超时,看讲解视频尝试用双指针。

2023-10-31 23:21:43 43 1

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

利用哈希表,遍历过的数字放在哈希表中,未遍历过的数字只要在哈希表中找到一个数相加等于目标值就可以返回下表。然后记录平方和,这时候可以用哈希表,和出现一次数值变1,如果再出现,说明陷入死循环,直接退出,如果最后有数字为1,返回true就行。用暴力方法依次寻找可以做出来,取一个数,遍历剩余的数,如果当前的数没有找到一个合适的数,那就再取下一个数,继续遍历剩余的数,最后找到就输出两个数的下标。记录一下s字符串字母出现的次数,如果该字母在t字符串中出现,次数减一,最后如果所有的字母次数都是0,说明是字母异位词。

2023-10-30 16:47:45 23

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

问题简单来看就是两个指针最后有没有指向同一个元素,如果指向就说明有交点,那就有一个前提,这两个指针必须同时移动并且同时开始位置要一致,这就引出下一个问题,如何使两个指针在同一位置开始移动?上一步交换完了,应该是1节点的next指向4节点,所以下一步循环应该从1结点开始,cur从虚结点开始,往后移动了两次,指向1节点。利用滑动指针或者说左右指针,先从结果分析,最后左值针应该指向倒数n+1个节点上,右指针应该指向链表尾节点的下一个,right-left刚好等于n+1;链表中有一个环,其尾部连接到第二个节点。

2023-10-28 17:39:12 86

空空如也

空空如也

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

TA关注的人

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