自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(318)
  • 资源 (1)
  • 收藏
  • 关注

原创 编程注意事项

这些是我刷了题之后的coding细节处理1. 初始值要怎么给这个问题经常出错。例如函数开头定义了一个ret,就一个while或者一个for这种,中间会修改这个ret,结尾返回这个ret,这个ret的初始值就非常重要。值就是特殊用例这几个循环根本就不会进的时候,函数返回值依然是正确的。2.数组遍历 跳过相同参数双指针的时候{1,1,2,2,3,3},例如要left_index+right_index的和等于固定值。那相同的参数就完全没有讨论的必要,如果要求列出不能重复的组合就更麻烦了。do{ i

2021-11-13 21:54:58 282

原创 重刷leetcode

我打算按照下面的方式重新刷题,毕竟经常出现刷了一段时间就忘了。代码我也打算重新写,并更新代码的完成情况。其它基础知识还没想好怎么处理,毕竟我虽然干了快三年,但是并没有学到啥东西,果然海康的产品开发就是测试和技术支持,layman都能干。1.两数之和:哈希表...

2021-10-02 17:24:47 282

原创 breadpad安装

https://github.com/google/breakpad这里的方法,但是有几个问题,

2023-12-02 10:01:18 425

原创 修改apt-get的出口IP

我之前蠢了,给我的apt-get指定了出口IP,为了使用刚高速度的方式,因为那个IP地址确实比较快,但是问题是出口IP竟然不是固定的,我太蠢了。而我竟然还忘了当时是怎么设置的,天呐,太蠢了。其实是在这里设置的``/etc/apt/apt.conf``,进去就能看到了。修改后update一下。我还不知道怎么恢复动态方式,就先记录一下。

2023-12-02 09:46:56 467

原创 337. 打家劫舍 III

直接看代码吧,如果不选当前节点,不一定leftresult就一定得选择has,右节点同理;如果选了当前节点,左右就肯定得选nothas了。得用递归,递归函数要求获取算当前节点和不算当前节点时最大的dp结果。

2023-04-30 21:13:25 124 1

原创 背包问题题

当i=0的时候,这行dp的dp[j]就是0(不选这个物品),所以这个max返回的一定是第二项,而第二项就是选择这个物品,选第二项的时候根本没有考虑满不满,因此这种情况背包可以不满。如果是先遍历物品再遍历容量,和0-1一样的时候,是组合数(无序),先遍历容量再遍历物品是排列数(有序)设置初始值:我见过的一般都是0,只有dp[j]+=dp[j-nums[i]]这种才是1,因为如果是0就始终是0了。0-1背包是先正序遍历物品,后倒序遍历容量,普通完全背包只要都是正序,先遍历物品还是先遍历容量都可以。

2023-04-30 19:43:14 715

原创 322. 零钱兑换

【代码】322. 零钱兑换。

2023-04-29 21:19:03 80

原创 377. 组合总和IV

这道题说所有情况都小于INT_MAX,我的第一反映是高个long long的dp数组,这样就肯定没问题了。加一个if判断,因为题目说了,有效结果不会超过INT_MAX。

2023-04-29 20:54:44 50

原创 518.零钱兑换II

dp数组含义,默认的dp表示这么大的容量能装多少东西,现在问的是这么大的背包装满最多有多少种方法。dp关系,

2023-04-24 23:06:11 271

原创 279 完全平方数

可以把它想成有若干个完全平方数,随便组合,最小的数量是多少,注意不是多少种组合,而是所有情况中最少的元素个数是多少。,所以先便利物品还是先遍历容量都可以。

2023-04-01 16:27:57 37

原创 322. 零钱兑换

第二个是初始值,初始值我没搞明白,但是题目说了0的容量,最小就是0。如果题目没说,我应该怎么办呢?完了这个破题的INT_MAX又搞错了,还得判断。这道题我卡住了两个地方,第一个是DP方程错了。

2023-04-01 15:24:08 46

原创 474. 一和零

这道题还是零一背包,但是容量的概念会不一样,因为容量时二维的概念,由0和1两个元素共同决定的。因此就用二维vector去表示这个容量。

2023-03-30 21:28:18 36

原创 494. 目标和

因此left = (target+sum)/2,如果不能整除,说明不能构造出target,同时,如果sum都小于target,全加都比target小,肯定不行。

2023-03-28 22:10:41 44

原创 1049. 最后一块石头的重量 II

相当于把石头分成两堆,这两堆的重量尽可能相近,两者的差就是最小重量。这道题的难点在于怎么把它和0-1背包联系起来。

2023-03-28 21:03:59 46

原创 416. 分割等和子集

【代码】416. 分割等和子集。

2023-03-27 21:38:55 58

原创 61. 旋转链表

【代码】61. 旋转链表。

2023-03-05 19:44:57 59

原创 146. LRU 缓存

这道题很出名,也不难。三个变量,一个list、一个unordered_map、一个capacity,unordered_map为了get能够1复杂度实现,当一个变量被使用,就把这个变量从链表中的某个位置放到链表头(当然放到链表尾,但是因为没有方法一下获取链表的尾节点迭代器,所以用了头),每次弹出结尾的节点就行。这道题要用到链表的节点移动,splice函数。

2023-03-05 11:38:47 49

原创 216. 组合总和 III

这道题还是这个问题,选择了2,剩下的内容就就只有[3,9],不考虑1了,因为是组合,不按顺序来可能会有重复。

2023-01-02 12:34:46 58

原创 343. 整数拆分

dp[i]可以用于遍历,j和i-j,分为这个j和(i-j)用dp和不用dp两种。如果用dp,意思就是这个数字需要被拆分。原题的题解中只判断(i-j)是否需要用dp,至于j就固定不用dp,我也不知道为啥,我觉得都得用。DP的话还是比较好理解的。dp[n]表示n这个数字的最大积是多少。我理解的递推表达式和题解有些区别。

2023-01-01 15:48:27 67

原创 201. 数字范围按位与

公共前缀是相同的,剩下不同的全用0补充。为啥是这样,我没看证明。就那么几种情况,挨个试一下。

2023-01-01 14:53:19 59

原创 572. 另一棵树的子树

如果两个字符串序列化后可以用string表示,我调用strstr函数就可以判断字符串的关系,但是因为每个节点存储的数据非常大,已经大于char能够存储的范围,就只能用vector进行判断。一个vector是否是另一个vector的子集,C++中是没有函数的,只能用KMP判断。例如一棵树只有一个节点叫做12,另一棵树只有一个根节点2,序列化的结果分别是12##和2##,两者之间并没有关系,但是后者却是前者的子串,这是因为12在字符串中本来应该是一个char,但是我这里用了两个字符,就异常了。

2023-01-01 12:31:04 55

原创 459. 重复的子字符串

两个字符串相加,删掉第一个和最后一个字符,如果原字符是这个字符的子集,就认为原字符可以由若个相同字符拼接而成,但是我并没看证明过程。

2023-01-01 12:21:44 46

原创 79. 单词搜索

这道题我就一个地方需要注意,就是如果数组只有一个元素。

2022-12-14 18:35:55 61

原创 90. 子集 II

选这个点是没有限制的,因为1,2选完了,1,2,2还是可以继续选的。不过不选是可能有重复的,要看之前是否选择过,如果有机会选却没用,就说明一定有另一种情况选了带那个带的,因此就不要选了。就说排序的,因为哈希的方法是一样的。这道题两种办法应该都行,因为本来就有空间复杂度,再加一个哈希没区别。一般而言去重有两种办法,我常用的就是哈希,如果能排序可能会更好。输出:[[],[1],[1,2],[1,2,2],[2],[2,2]],机不可失时不再来。输入:nums = [1,2,2]输出:[[],[0]]

2022-12-10 16:55:12 320

原创 117. 填充每个节点的下一个右侧节点指针 II

这道题本来可以很简答,一个队列,存储指针和它的行数就OK了,但是这道题的难点在于不用额外空间复杂度。横向看一下,这一行是不是就是一个链表呢?多加一个变量,用来存储第一有有效节点,什么是有效节点呢?就是左右节点中至少有一个不为空的。这个节点为啥不存第一个节点呢?而是存第一个有效节点呢?其实对于这一行来说是没有区别的,但是对于下一行的使用是有区别的。下面介绍第二个变量,叫做pre,每次遍历一个节点,都是让pre的next指向当前节点。既然这样,pre的默认值是无意义的。因为pre的next才是第一个有效节

2022-12-07 21:27:01 285

原创 209. 长度最小的子数组

这道题思路不难,但是却调试了几次才对给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]

2022-12-06 21:09:54 54

原创 713. 乘积小于 K 的子数组

这个思路就是滑动窗口,弹出的时候+=以这个位置开头的所有结果。退出条件是right到最右边,因此结束的时候也需要再判断一次。示例 1:输入:nums = [10,5,2,6], k = 100输出:8解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。示例 2:输入:nums = [1,2,3], k = 0输出:0

2022-12-06 20:48:23 87

原创 986. 区间列表的交集

这道题我第一次做了好久都没搞定,这次一下就ok了。上下两个指针,其实就两种情况,first和second没有交集。如果没有,就让小的那个指针++,如果有交集,就做出这个集合,完了第二个值小的那条链的指针++。

2022-12-05 21:14:45 78

原创 162. 寻找峰值

这道题我没啥思路,要注意,-1和n的下标都是负无穷。left和right的意思是[left, right]中至少有一个极大值点。找到一个mid,如果两边的数字都比mid的小,那mid就是结果了。如果左右有任意一侧比mid大,例如是left,那[left, mid-1]中肯定有极大值点,画个图就知道了。峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nu

2022-12-04 20:38:07 245

原创 33. 搜索旋转排序数组

思路很简单,先找到那个index,左侧找一下,右侧找一下。总之还是那个宗旨:[0,left-1]和[right+1,n]都是各自排好序的结果,即index不可能在这两个范围。不过很奇怪的是找index的时候nums[left]

2022-12-04 19:34:31 59

原创 101. 对称二叉树

这题让我做麻烦了,不过我思路也很对。两颗二叉树如果序列化结果事一样的,那么两个完全一样。如果镜像对称,序列化的时候一个先插入左子节点,一个先插入右子节点。有个代码有点傻,我为了能用要一个函数就解决,用了个傻了吧唧的bool变量。

2022-11-29 21:00:31 480

原创 131. 分割回文串

递归的s字符串是不变的,x表示,从[0, x-1]的结果已经出来了,后面需要处理的是[x,n)的。需要注意,这里说的[0,x-1]结果出来,不是所有的情况都有,对于某一次而言,是指前面已经排好了,具体前面是"aa"还是"a"“a”,这个不用管,会有递归来处理,只需要处理好后面的内容就行了。前者有很多办法,O(1)的话,可以用DP,我就不看了,反正回文串我就用manacher处理,虽然复杂度不会有提升(因为递归复杂度会大于N,单纯的这个过程DP复杂度是N方,manacher是N),但是空间复杂度会有提升。

2022-11-27 22:48:42 90

原创 368. 最大整除子集

例如9,18,54,90,108,180,360,540,720这个例子,当遍历到90的时候,最长的是9,18,54,但是再往后就不一定了,取决于后的数字,如果后面都是90的倍数,而不是54的倍数,那么如果跟着54来,相当于前面全选错了,例如上面的例子,等到540的,前面是54过来的,还是90过来的都一样,但是到了720,就是90好了。再来一个endfrom数组,标志这个数组是从哪里来的,这样就可以通过endfrom一口气找回去直到endfrom[i]==i的时候截至,说明到头了。的情况中,dp最大的,

2022-11-21 22:05:55 289

原创 剑指 Offer II 093. 最长斐波那契数列

现在有三个数字,a,b,c,假设它们时斐波那契数列,那么一定满足a+b=c,a的下标时index_a,b的下标是index_b,c的下标是index_c,那么dp[index_a][index_b] = dp[index_b][index_c]+1。例如, [3, 5, 8] 是 [3, 4, 5, 6, 7, 8] 的一个子序列)解释: 最长的斐波那契式子序列有 [1,11,12]、[3,11,14] 以及 [7,11,18]。输入: arr = [1,2,3,4,5,6,7,8]

2022-11-20 17:18:16 217

原创 88. 合并两个有序数组

为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。首先0~n-1,表示闭区间的n个数字,就是n-1-0+1,而后面的下标是n-2到m+n-1,总共有m+n-1-(n-2)+1=m个数字。输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。输出:[1,2,2,3,5,6]

2022-11-20 11:47:32 56

原创 1055. 形成字符串的最短路径

dp[i]=dp[i-1]第二个字符ab时也是,dp[i]=dp[i-1]。给定源字符串 source 和目标字符串 target,返回 源字符串 source 中能通过串联形成目标字符串 target 的 子序列 的最小数量。(例如,“ace” 是 “abcde” 的子序列,而 “aec” 不是)。解释:目标字符串 “abcbc” 可以由 “abc” 和 “bc” 形成,它们都是源字符串 “abc” 的子序列。解释:由于目标字符串中包含字符 “d”,所以无法由源字符串的子序列构建目标字符串。

2022-11-19 20:08:05 561

原创 1027. 最长等差数列

回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], …并且如果 seq[i+1] - seq[i]( 0

2022-11-19 18:53:27 383

原创 1388. 3n 块披萨

最后一个问题,上面说了dp数组的横纵长度不能直接用数组长度啥的表示,答案是这样的,它们把横纵坐标长度都加了一,原因很简答,保证数组从1开始。因此dp[i][j] = max(dp[i-2][j-1]+slices[i],dp[i-1][j]),如果选择第i个元素,那么i-1就不能选,就得选i-2,如果不选i,必须选好j个数字,因此就是dp[i-1][j]。例如008080,这种情况我能拿到16的披萨,因为我把第一个0拿走后,就变成了0空空空80,此时我再拿8,aclice可以拿前面那个0,也是能办到的。

2022-11-19 11:49:28 445

原创 面试题 17.24. 最大子矩阵

返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。链接:https://leetcode.cn/problems/max-submatrix-lcci。和《矩形区域不超过 K 的最大数值和》是一道题,只是稍微有有点区别。给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。解释:输入中标粗的元素即为输出所表示的矩阵。注意:本题相对书上原题稍作改动。输出:[0,1,0,1]

2022-11-18 09:38:21 47

原创 363. 矩形区域不超过 K 的最大数值和

首先搞到每个点的前缀和,此时的复杂度就是O(m*n),如果要把所有的矩形子集都判断算一遍,那就是先固定左上角的节点,再遍历右下角的节点,复杂度就是。感觉现在的代码是左开右闭,但是好像并不是,因为这个区间的问题,需要在set中加一个0。左移一下就是左移一列,那么如果我现在从上往下压,一维数组的每一位表示这一列的和,这虽然是一维的,但也能起到二维的效果。给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。m是行,n是列,先遍历矩形的上边界,就是。

2022-11-16 21:50:38 253

FileRecv.7z

FileRecv.7z

2021-07-22

空空如也

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

TA关注的人

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