自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Leetcode 岛屿问题 200, 1905, 694重新做,其他的想思路

这里把岛屿淹类似于维护了visited, 确保不会重复计算岛屿,dfs的作用是把一整块岛屿都淹没了,当遍历到岛屿的其中一块时, 会向外淹没,直到这个岛屿都被淹没。和上一题很像,这里就不需要把中间的岛屿淹没了,只要求1的数量就可以了。需要用一个set记录岛屿的形状。重要的是想到是什么是子岛屿。去除掉四边的岛屿就可以。这里也要记录撤销的值。

2023-10-10 00:30:28 153

原创 Leetcod graph(new topic)

如果不是acyclic(无环), 要用另外一个vector 记录走过的节点,防止进入死循环。1.首先要排除,因为条件,所以至多有一个名人,那么两两对比,选出唯一的可能是名人的那个人。3.最后剩下的那一个也不一定是名人,要在判断。这里用的是后序,所以之后要reverse一下。需要一个单独的vector记录。1.首先要建一个graph表。这里的s是记录正在走的节点。2.对比的结果有四种。2.遍历判断是否有环。

2023-09-29 05:15:58 214

原创 Leetcode 15

2.注意相等的时候,要while循环去掉一样的。

2023-09-27 05:36:39 168

原创 Leetcode

这里要改变链表就要写pre->next = head->next。注意如何判断是不是连续数第一个数字。要记得回溯的时候depth-1。这道题要注意的就是要写虚拟表头。

2023-09-26 00:40:17 593

原创 Leetcode (OK)242 1 219 (思路)383 202 (*)205 290 49

2.要先判断两个大小是否一样。1.注意如何存储单词。也可以直接用sort。

2023-09-22 09:56:30 107

原创 Leetcode (*)141 2 (ok)21

【代码】Leetcode (*)141 2 (ok)21。

2023-09-21 21:53:17 67

原创 Leetcode (ok)167 11 (思路) 35 74 (*) 162 33 34 153

当right = nums.size(), 表示为左闭右开,此时终止循环时,left = right。先确定断崖和mid的关系, 在找有序的部分。最重要的还是如何取区间。把二维的转换成一维的。

2023-09-15 00:46:10 153

原创 Leetcode 392(会) 20注意细节 * 12 151 6 71

2)每个单词进行翻转的时候,不要忘了判断最后一个词,因为最后一个词的后面没有空格,所以要加一个条件i==newString.size()这里的a要是isstream,所以要加一步stringstream ss(path)1.除了每组第一个数(如A, I),其余每一行都会有两个这一组的数(如B和H)1)在写reverse函数的时候,要写string& s, 不要把&忘掉。因为这里涉及到“..”, 所以正确的是stk存储的是string。有基本思路:把每一组‘z'看成一个组,依次读取(像‘A-H’)

2023-09-14 05:05:59 92

原创 leetcode 42, 58, 14(*)

因为其实只要一边找到最大值了,无论另一边是不是最大值,只要比它大,那么一定能兜住他。某一竖条的储水量怎么求?他的高度是左边最大 和 右边最大 取的最小值,然后再减去自身的高度。这里的l_max是【0, left】的最大值,r_max是【right, n-1】的最大值。这里就是把每一次的最大最小值都记录下来,就不用每次都遍历了,跟上一个思想没有区别。这里用到sort, sort的最前和最后是最不相关的两个string。因为最后也有可能有空格,所以从后面开始。1.暴力解法(未通过)

2023-09-13 21:45:05 83

原创 Leetcode122,55可以只想思路, (*)45 274 135

可以想象成山峰山谷,当上升时(ratings[i] > ratings[i-1]), 那么这个人就要比前一个人多拿一个,下降时,前一个人要比后面的多拿一个(如果只看计算,那么就可以想象成+1即可),这样算完后会有一个问题就是, 每一个山峰会多算一次(peak和valley各算了一次), 为了两边都满足,peak要取两边的最大值,也就是说在计算上,要减去小的值。这道题因为要考虑左右两边,所以要从左到右遍历一次,也要从右到左遍历一次。这道题的关键是想到,要用一个数字来记录选择的跳跃步数。

2023-09-12 22:08:01 319

原创 Leetcode

这里我有一个地方想错了,重复的两个未必是两端,这样的话,就要把重复之前的全部都删掉,所以缩小窗口的时候,不能是map[s[right]]-- (只删掉重复的,而是s[left], 这样就能把重复之前的数字全部都删掉)

2023-09-09 00:23:32 210

原创 Leetcode array 704 27 189 121 380 238 134 13

二分搜索:判断条件是left 和 right这里就要注意区间开闭的问题。

2023-09-06 01:07:14 374

原创 Leetcode 二叉树 669

确定好区间的开闭。

2023-08-21 22:11:18 379

原创 Leetcode 二叉树 501 236 235 701 450

用unordered_map(不是搜索二叉树也可以用)这道题要从最下面开始找,当p,q分别在左右两端的时候证明此时就为公共祖先。

2023-08-18 22:38:48 157 1

原创 Leetcode 二叉树 106 105 654 617 700 98 530

直接用下标写。

2023-08-17 03:49:32 267

原创 Leetcode 二叉树 111 222 110 257 404 513 112 113

1.分解思想2.也可以用层序这里是完全二叉树,所以跟普通的求法不同。

2023-08-16 03:30:34 181

原创 Leetcode 动态规划

这里的增的功能用另一个删来代替1.dp[i][j]这里要设置为在范围[i,j]范围内是否是回文串2.范围,因为这里依赖于dp[i+1][j-1]所以一个从大到小,一个从小到大(完全看答案的,之后要重新写)1.初始化问题:因为我们设定的是j=i+1, 所以会算不到i=j的时候,所以要初始化为12.当不等的时候,要分别看加进来i,j的情况,而不是直接dp[i][j] = dp[i-1][j-1]

2023-08-15 21:51:17 175

原创 Leetcode 子序列 53 392 115 583

1.双指针2.动态规划初始化:这里感觉对我来说有点难以理解dp[i][0] 这里我的理解是,以下标i-1位结尾的s和空集能够相同的子序列的个数,那么肯定只有一个,就是把s里的全部删掉dp[0][j]s是空数组所以不可能和t一样(除了t是空数组的时候,所以dp[0][0]为1)注意:这里不能直接用int会报错。

2023-08-14 22:10:37 144

原创 Leetcode 动态规划 打家劫舍 337 股票 121 122 123 188 子序列 300 674 718 1143 1035

因为这里最长子序列不一定在最后,所以要重新设一个值记录最长子序列。dp[i] 表示下标为i的数字(包括)的前面的最长子序列的长度。初始化的时候所有的值的初始值都应该是1。

2023-08-10 00:38:56 199

原创 Leetcode动态规划 474 518(背包总结) 377 70 322 279 139 198 213

j++){1.组合数的递推公式2.注意组合数和排列数组合数,对顺序没有要求,即1,2和2,1只算一次,此时,只能先遍历物品,再遍历背包排列数,先遍历背包,再遍历物品3.完全背包和01背包完全背包:每个物品可以重复用,一维数组遍历背包的时候从小开始01背包:每个物品只能用一次,一维数组遍历时从大到小public:dp[0] = 1;i

2023-08-09 21:43:34 227

原创 Leetcode 动态规划 62 63 343 96 416 1049 494

最重要的一点明确dp[i][j] 是什么意思注意:1.注意特殊的情况开头和结尾是1的2.在设置初始值的时候,如果其中一个为1,那么后面的就都是0了可以在上面代码的基础上在做一点改进这样写更简洁一点1.这里的dp[i] 指的是 整数i拆分出来的最大乘积2.一开始没有想清楚递推公式从左右子树出发开始找规律。

2023-08-08 22:23:39 103

原创 Leetcode 队和栈列 20 1047 150 239 347

有两种特殊情况,第一种,一出现就是右括号(代码中的体现是判断的时候要写stk.empty(), 不能只写不等)第二种是左括号多出来了(代码体现在最后return stk.empty)

2023-08-07 21:29:32 29

原创 LeetCode 栈与队列

2.pop的时候要注意判断stkOut是不是空。其中一个queue只是单纯用来记录最后一个值。

2023-08-03 21:33:19 35

原创 Leetcode 股票 121 122 123 188 309

这里的dp[i][0]表示的是持有股票。

2023-07-27 21:49:17 48

原创 Leetcode 136 2// 动态规划打家劫舍 198 213 337 // 18// 字符串 344 541

1.位操作,用异或2.使用map(使用了不恒定的额外空间)3.排序后看前后两个元素是否一样,使用了恒定的额外空间。

2023-07-22 03:57:39 33

原创 Leetcode 动态规划 139 // 11 43

3.明确什么时候是数字,什么时候是char,char/int互换要 +-‘0’2.一定要明确数组的哪一端是个位数,哪一端是大的,这里个位数是数组最大编码的值。这样比较好判断0,在数组前面的0是不需要进入string结果的。1.不能直接相乘,会溢出,要模拟每位数相乘的步骤。5.模拟每一步的时候,要记得加上之前的值。4.最后还要判断特殊结果,即结果为0。

2023-07-21 22:06:41 49

原创 Leetcode 动态规划70 322 279 哈希表 454 383 15

组合数,不在意顺序(比如(1,2)和(2,1)是同一组)所以先遍历物品,在遍历背包。1.为了求得是最小值,dp数组初始化应为INT_MAX,dp[0] = 0。因为一种和肯能会出现多次,所以要用map-val记录出现的次数。排列数,在意顺序(不同顺序的算新一组),所以先背包,在物品。2.else里面要用while,因为有可能一直重复。2.要加上条件if 不等于最大值以及-1的情况。3.明确排列数和组合数的区别。1.先遍历物品,在遍历背包。2.先遍历背包,在遍历物品。

2023-07-20 23:20:58 57

原创 Leetcode 动态规划 474 518 377 哈希表 242 349 202 1

如果求排列数就是外层for遍历背包,内层for循环遍历物品。1.如果题目中给了范围,就可以用数组(因为set要占用的空间更大)1. 如果求组合数就是外层for循环遍历物品,内层for遍历背包。2. 要加上限制条件防止runtime error。2.可以把res也改成set这样就不用删除了。这个是因为测试用例有想加大于4个字节的存在。装满背包一般用到公式。

2023-07-19 03:54:54 29

原创 Leetcode 动态规划 96 背包问题 416 1049 494

本质为找出总和的最相近的两堆。有多少种方法把背包装满。

2023-07-18 22:18:30 37

原创 Leetcode 动态规划62 63 343 链表 86 206 92

1.确定dp数组的下标及定义dp[i][j]从(0,0)到(i,j)的不同路径数量2.确定递推公式3.初始化dp[i][0]和dp[0][j]都是1;4.遍历顺序,从左上到右下。

2023-07-17 22:37:53 34

原创 Leetcode链表 24 19 160 142 141 21

注意:1.return dummy->next而不是head;2.最好把post放到循环里面,不然可能会出界。

2023-07-14 21:48:07 33

原创 Leetcode 链表 203 707 206 动态规划 509

因为如果不写,当遇到n=1的时候会运行dp[2],但是vector是没有dp[2]的,就会出现错误。不要忘记增加节点和删除节点的时候size也要变化。要稍微注意一下最后返回的是哪个值。为什么要写第一句n<=1?

2023-07-13 23:45:16 26

原创 Leetcode数组 977 344 5 209 3 438

双指针注意一个问题出现的情况在函数中该返回string的地方返回了int。尤其注意是不是return "0"写成了return 0这道题需要给res设置初始值。

2023-07-12 04:25:13 42

原创 Leetcode数组 二分查找 双指针 704 34 35 27 167 26 283

可以用二分法的两个条件:1.数组是有序的2.数组是不重复的注意区间:当right = nums.size()-1;就意味着这时一个左闭右闭的区间,相应的 循环条件为 left <= right,left和right的取值也为mid+1 和mid-1。

2023-07-11 02:11:37 31

原创 Leetcode 455 376 53 122 55 45 988 1022

若参与比较的两个串值相同,则函数返回 0;若字符串 S 按字典顺序要先于 S2,则返回负值;两个代码的区别是,一个是遇到更大的就计数,一个是这一步走完再计数走到这区间中的另一个最大值。想到了负数对连续和的影响,但是有影响的是连续和为负数而不是遇到负数就返回。因为每天只能买入一支股票,所以它就是每天正向利润的总和。2.逐字符比较,从前往后,比较出结果后就结束。string.compare的用法。(也可以用动态规划,之后在写)先加还是判断,还是先判断再加。1.比较的是字典顺序。

2023-06-27 01:00:07 35

原创 Leetcode 回溯 491 46 47 199 298

这道题容易想到用used[],但是这时不可以的,因为input的nums是没有顺序的,而且也不能排序于是可以想到要检查每一层是否选过相同的数(for循环是横向(层),迭代是纵向)1.这里不需要return,因为记录了之后还要接着看后面的值2.unorder_set的位置这里在for循环前面意味着,在迭代到下一层的时候会建立一个新的set,所以set记录的是每一层使用的值同样的,迭代后是不需要删掉set最后一个元素3.unordered_set一些用法。

2023-06-23 22:32:40 30

原创 Leetcode 回溯

第一次用了新的string记录,但在原始的string上分割就可以了。

2023-06-22 21:46:51 29

原创 Leetcode 回溯

这里主要是可以有重复的元素,这也就意味着迭代的startIndex不需要+1了优化后:这里需要给数组排序(!

2023-06-21 01:11:59 31

原创 Leetcode 回溯(组合)

回溯算法的根本为穷举,所以可以解决组合的问题他的根本也是树的问题,k限制了树的高度,n限制了树的宽度。

2023-06-17 00:51:57 31

原创 Leetcode 二叉树

onelevelNode要在每次循环的时候重新建一次,不然会带着上一次的值。

2023-06-16 22:56:33 28

空空如也

空空如也

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

TA关注的人

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