自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 十大排序|十大排序

这里王道讲的代码,有n个数的话实际上留了n+1位,第一位空着做哨兵位。快速选择排序------------------基于交换排序,前序遍历构建树,枢轴,三、冒泡排序(相邻位置元素进行比较和swap,直到把最大的元素“冒”到最后)稳定排序:冒泡排序、插入排序、归并排序、基数排序、桶排序。不稳定排序:选择排序、快速排序、希尔排序、堆排序。

2023-08-01 19:36:12 377

原创 代码随想录|回溯法2刷

我也不知道咋发明的,还是理解上错误,貌似我这样写约束的是纵向,打印结果只有一种。但是正确解法是每个节点上横向扩展,比如【1,2,3】第一层已经选了1,那么就平等的试一下选2、选3,选完就used,也就是节点上横向扩展。错了一些,重点是回溯是一个bool,找到合适的立即返回结果,不合适的不返回。看了答案,主要是横向扩展节点时要做约束。大概看了一下答案,重点在于三次循环。今天的代码都是一次对。自己的解法,欣喜若狂的做对了。挺震惊的,我写的还挺快的。

2023-06-29 09:47:03 165

原创 二叉树|代码随想录2刷|11-34

这道题有意思的地方在于,A和B在判断是否same时,不是完全相同。B遍历结束时A可以不遍历结束。另一个二分的方法计算太偏了,既然时间复杂度都是O(logn*logn),不如记忆简单的那个。这种情况下是true。所以写的函数是is_almostsame而不是is_same。//唉,又看了一遍代码随想录,我好像总是只能想到自己的解法。一些错误思路,要找的节点不是父节点,就是要删除的节点。利用完全二叉树的性质,这个更容易想到,

2023-06-26 10:28:21 186

原创 链表/25.K个一组翻转链表21.合并两个有序链表141.环形链表160.相交链表92.反转链表Ⅱ23.合并K个排序链表143.重排链表82.删除排序链表中的重复元素||148.排序链表83.删除排序

一刷,四个指针很重要,可以单独拿出来到函数中好理解。跟着一刷走,大概就是每遍历k个就断开,同时记录剩余链表的头节点。和上面那道题中一样,要反转的链表的前一个结点、要反转链表的第一个节点、要反转链表的最后一个节点、要反转链表的尾节点的下一个节点(同时也是下一个要反转链表的头节点),要特别注意。1、四个节点,且end节点必须从pre开始,而不是start开始2、每次反转,先让end去探路,如果小于k个,则break3、反转链表前,必需让end->next=nullptr ,链表断开再反转。

2023-06-19 16:23:28 91

原创 代码随想录2刷|链表1.链表理论基础2移除链表元素3.设计链表4.翻转链表5.两两交换链表中的节点6.删除链表的倒数第N个节点7.链表相交8.环形链表lI

二刷发现思路记错了,fast一次走两步,slow一次走一步,我记成fast多走两步后,两个就同步了。基本还是搞错了,cur 和 temp temp1 三个指针 四个节点,相隔距离,链接关系,都是需要稍微死记硬背一点的。二刷的错误点在于边界判断太多了,而且一开始的慢指针尾巴忘记指向空指针,导致整个链表没有尾巴,一直报错了十分钟。一刷,快慢指针最佳做法,重新写一遍.注意n++。挺好的,看了以前写的那一遍,然后重写了一遍。回忆一刷的简单做法,直接让slow指针从空开始,fast从head开始.

2023-06-15 10:07:30 417

原创 代码随想录|day13| 栈与队列part03 ● 239. 滑动窗口最大值● 347.前 K 个高频元素● 总结

没有把第一个最大值放进res ,更正后正确。

2023-06-12 13:52:09 397

原创 代码随想录| day11|栈与队列part02 ● 20. 有效的括号● 1047. 删除字符串中的所有相邻重复项● 150. 逆波兰表达式求值

注:C++的switch只能接受数值、字符型(不可以字符串)大概看了一下,由于是简单题所以没重新做。150. 逆波兰表达式求值。有个字符串转int的函数。把“-11” 转为 -11。

2023-06-12 10:22:07 725

原创 速刷剑指offer

JZ11 旋转数组的最小数字第五题跳过。栈和队列等着代码随想录二刷补上。JZ11 旋转数组的最小数字代码:这个二分法是左闭右开的,就真的不好理解。非正确思路:每次pop都要把stack2中的所有元素装回stack1正确思路,每次pop只是pop出stack2的栈顶元素,当stack2为空时,才一次性倒入所有stack1的元素。No10、矩阵覆盖思路:No11、二进制中1的个数思路:n&(n-1)把n最低位的1变0这道题用到了快速幂。可以复习一下.(1)快速幂+递归d第一种:快慢指针。

2023-06-11 16:04:45 351

原创 代码随想录|day8|字符串1● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符串

151.翻转字符串里的单词 -------快慢指针,特殊思路。剑指Offer58-II.左旋转字符串。

2023-06-11 14:41:26 39

原创 代码随想录2刷|day7|哈希表part02 ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和

建议: 要比较一下,本题和 454.四数相加II 的区别,为什么 454.四数相加II 会简单很多,这个想明白了,对本题理解就深刻了。基本思路:排序,会有重复的序列例如-2,-2,4-1,1,1这种,允许出现[-2,-2,4][-2,1,1],则第一个数是重复序列的第一个数,不是第一个数则continue.然后双指针遍历找出后面的两个数。建议:本题虽然和 两数之和 很像,也能用哈希法,但用哈希法会很麻烦,双指针法才是正解,可以先看视频理解一下 双指针法的思路,文章中讲解的,没问题 哈希法很麻烦。

2023-05-16 11:10:09 50

原创 代码随想录2刷|day4|● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

349. 两个数组的交集建议:本题就开始考虑 什么时候用set 什么时候用数组,本题其实是使用set的好题,但是后来力扣改了题目描述和 测试用例,添加了 0 <= nums1[i], nums2[i] <= 1000 条件,所以使用数组也可以了,不过建议大家忽略这个条件。尝试去使用set。202. 快乐数。

2023-05-15 12:29:37 40

原创 牛客网剑指offer|中等题day2|JZ22链表中倒数最后k个结点(简单)、JZ35复杂链表的复制(复杂)、JZ77按之字形顺序打印二叉树(中等)

2、误区二:一开始觉得可以在遍历源链表后,因为原链表的next指针域已经遍历过不再用,所以想让源节点的指针域更新为存储新节点 的地址,即A->next=A_copy;1、误区一:觉得建立的新节点可以直接指向源节点的next和random,实际上这样做指向的还是源节点,而对于往后一个个建立的新节点,下一个next是能写的,但是random可能在下2、5个之后才创建,所以是一个难点。第二次更新新链表的random指针域。则遍历源链表两次,第一次建立新链表,每个next更新为新节点地址;最终代码是自己写出来了。

2023-05-10 11:46:43 249

原创 牛客网剑指offer|中等题day2|JZ76删除链表中的重复节点、JZ23链表中环的入口节点、JZ24 反转链表(简单)

自己好像还是偏向双指针这种想法,所以用了两个指针,这样感觉更好理解一些。这次也还是没写出来。半看了自己之前写的代码,但是思路是正确的。对了,去重有两种,我一开始写成了简单的那种,仅仅去重。这种连重复元素都去掉的更难理解一些。

2023-05-09 15:02:06 259

原创 代码随想录|day58|单调栈part01 ● 739. 每日温度 ● 496.下一个更大元素 I

为了便于理解,我定义了map,遍历nums2中的单调栈,map的第一个元素是nums2中的元素,第二个元素储存nums2中每个元素对应的下一个元素。然后最终修改nums1.看nums1中的每个元素在不在map中,从而找到对应的下一个元素。大家可以读题,思考暴力的解法,然后在看单调栈的解法。我记得的,这个要把数组*2,或者使用%。以前做过,现在不记得咋做的了。本题和 739. 每日温度 看似差不多,其实 有加了点难度。今天正式开始单调栈,这是单调栈一篇扫盲题目,也是经典题。怎样层层递进加入难度的。

2023-04-27 13:18:35 414

原创 代码随想录|day57|动态规划part17● 647. 回文子串 ● 516.最长回文子序列● 动态规划总结篇

647. 回文子串647. 回文子串动态规划解决的经典题目,如果没接触过的话,别硬想 直接看题解。

2023-04-26 15:26:49 84

原创 代码随想录|day56|动态规划part16● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇

72. 编辑距离583. 两个字符串的删除操作本题和动态规划:115.不同的子序列 相比,其实就是两个字符串都可以删除了,情况虽说复杂一些,但整体思路是不变的。自己的思路和错误的地方。看了代码随想录之后,自己写出来的。理解程度80%。具体不太彻底懂的点在递推公式那里。

2023-04-25 11:37:46 106

原创 代码随想录|day55|动态规划part15● 392.判断子序列 ● 115.不同的子序列

这道题目算是 编辑距离问题 的入门题目(毕竟这里只是涉及到减法),慢慢的,后面就要来解决真正的 编辑距离问题了。和我自己想的思路很像,只是我把定义dp[i][j]代表s[0...i-1]、t[0...j-1]是否匹配。但相对于刚讲过 392.判断子序列,本题 就有难度了 ,感受一下本题和 392.判断子序列 的区别。答案dp[i][j]代表s[0...i-1]、t[0...j-1]匹配的最大长度。最后一个位置推理为dp[0][0]==1.看完答案后,这个比较好写出来。两种写法,双指针和动态规划。

2023-04-24 18:13:29 66

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

53. 最大子序和-------------这道题做了很多遍,再做感觉没有印象。理解它和公共子序列问题一样还是需要一定门槛。代码就是复制公共子序列的题。阿哲,就是最长公共子序列。1143.最长公共子序列。看了20分钟,没思路捏。1035.不相交的线。1035.不相交的线。说这道题用贪心做过。

2023-04-22 11:29:47 54

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

思考,按照dp[i][j]是以nums1[i-1]、nums2[j-1]为结尾的最长重复子数组的长度这种定义,不应该返回dp[n1-1][n2-1]这种。它的最长递增子序列就不是最后一个元素。所以必须再遍历一遍得到的dp[j],返回最大值。因为以nums[i]为末尾元素的最长递增子序列至少长度为1.改正之后正确。最长递增子序列是 [2,3,7,101],因此长度为 4。看了思路之后写的代码,不知道为什么报错了。dp数组的初始化值不应该为0,而应该是1。自己的做法,看了一下思路为贪心。打印的二维数组是对的。

2023-04-21 11:40:23 181

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

说实在的这个暂时没看懂。比起我分析的状态,又多了一种状态,看着十分头大。714.买卖股票的最佳时机含手续费。和答案不一样,但是还是有些相似的。

2023-04-20 16:28:11 152

原创 代码随想录|day50|动态规划part11● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

这道题一下子就难度上来了,关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。本题是123.买卖股票的最佳时机III 的进阶版。看了题解,然后自己写出来了,一遍过啦啦啦啦啦。状态转移方程比较好想,初始值并不太好想。直接看答案,五种状态,清晰明白。188.买卖股票的最佳时机IV。188.买卖股票的最佳时机IV。基本明白思路后能一次写出。

2023-04-19 10:08:15 57

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

好难懂,尤其是理解状态的变化以及为什么要这么设置,花了大概一个半小时去理解什么叫”持有股票“,什么叫”不持有股票“。我自己拆分了下几种情况。这道题有贪心和动态规划两种解法,贪心前面已经写过,而且我二刷竟然记得!第0天(在卖的情况下)能持有的最大资产,//第一天不能既买又卖,最大值为0。,因为这种情况下是第i天卖出,则前提条件是前面已经买入股票了。第0天(在买的情况下)能持有的最大资产。直接看答案吧,自己做想不出啦。买卖股票I和买卖股票||的对比。我与他人的bettle结果。

2023-04-18 11:33:43 97

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

用的是逻辑而不是套路。让人想起爬楼梯那道题。这里我犯了初始化错误,错误在注释中写出。啥也不会,但是视频讲的太好啦!没想到做法,感觉这道题只能靠认识,自己想不出来。这里我还以为要用01背包。最终代码自己写出来了,很满足。

2023-04-17 15:57:50 58

原创 代码随想录|day46|动态规划part08● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

这道题比较复杂的是dp的i和j,与s.substr中s的index,不是一个东西,相差1,相差的1就是dp[0]空字符串。后来改成代码随想录的答案(i<j)正确了。大概看了一下,全部想错了呢。救命,回溯法全部忘光了。

2023-04-17 10:35:44 57

原创 代码随想录|day43| 动态规划part05---------● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

想使用回溯法,结果回溯法也生疏了唉。不应该把sum==target写在条件里。自己的答案,看着视频后做出来了,没有细看视频。很像了,可以尝试先自己思考做一做。416. 分割等和子集。

2023-04-15 21:22:07 50

原创 代码随想录|day45| 动态规划part07● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数

本题 和 322. 零钱兑换 基本是一样的,大家先自己尝试做一做。如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。思路基本没问题,有些约束条件不知道为什么会加。这俩条件没写出来报错了。

2023-04-15 21:20:14 52

原创 代码随想录|day44|动态规划part06● 完全背包● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

因为每一行,比如第一行只放了物品1,物品2等到第二行才放。则当遍历dp[2]只会有(1,2),不会出现(2,1).//先遍历背包还是先遍历物品是没有影响的。可以和01背包保持一致,都先遍历物品再遍历背包,也就是一行行按行遍历。背包容量的每一个值,都是经过 1 和 5 的计算,包含了{1, 5} 和 {5, 1}两种情况。01背包的核心代码,01背包内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次。与0、1背包不同的是,内层循环遍历背包时需要从小到大遍历,这点和0、1背包不同。

2023-04-15 17:39:53 335

原创 代码随想录|day42| 动态规划part04-----01背包问题,你该了解这些! ● 01背包问题 滚动数组 ● 416. 分割等和子集

此时dp[j]有两个选择,一个是取自己dp[j] 相当于 二维dp数组中的dp[i-1][j],即不放物品i,一个是取dp[j - weight[i]] + value[i],即放物品i,指定是取最大的,毕竟是求最大价值,dp[j]可以通过dp[j - weight[i]]推导出来,dp[j - weight[i]]表示容量为j - weight[i]的背包所背的最大价值。dp[j - weight[i]] + value[i] 表示 容量为 j - 物品i重量 的背包 加上 物品i的价值。

2023-04-12 10:44:00 222

原创 webserver|1.29dup、dup2函数

【代码】webserver|1.29dup、dup2函数。

2023-04-10 21:04:31 36

原创 websever|1.25|模拟实现ls、l命令

本节工作-----希望能写出一个文件,使得./app a.txt 这个命令可以展现出和 ls -l a.txt 一样的结果。其中文件权限占perm[0],User\Group\Others各占3位。ls -l a.txt 命令可以查看当前文件所有的信息。基本用perm[11]获取文件类型和文件权限。

2023-04-10 15:43:32 72

原创 代码随想录|day41| 动态规划part03● 343. 整数拆分 ● 96.不同的二叉搜索树

今天两题都挺有难度,建议大家思考一下没思路,直接看题解,第一次做,硬想很难想出来。视频讲解很详细,链接。

2023-04-10 11:23:31 308

原创 代码随想录|day34|贪心算法 part03● 1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

需要背。

2023-04-09 21:17:07 254

原创 代码随想录|day32|贪心算法 part02● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

本题同样不容易想出来。贪心就是这样,有的时候 会感觉简单到离谱,有时候,难的不行,主要是不容易想到。正确答案,这次经过重新思考,确定最后一个farest到达n-1即可。想了一些很初级的做法,但是全都不对。122.买卖股票的最佳时机II。

2023-04-08 21:20:22 71

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

自己做出来了,知道是动态规划后并不难想。

2023-04-08 16:41:32 345

原创 代码随想录|day38|动态规划part01● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

1、找dp数组,下标的表示含义,一定要清楚dp[i][j]中i,j,的含义。PS:贪心算法整一个大章节跳过了,过后两天补上。今天先跟上动态规划的步伐。很简单的动规入门题,但简单题使用来掌握方法论的,还是要有动规五部曲来分析。5、当自己感到迷惑时,要打印dp数组。打家劫舍3道,股票问题7、8道。有拓展问题,但是没有看。3、dp数组如何初始化。

2023-04-07 12:08:22 323

原创 代码随想录|day31|贪心算法part01----● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

思路:简单的给小饼干排序,给小朋友胃口排序,然后对于每块小饼干,如果小孩子吃了,下一次循环就看下一块小饼干和这个孩子之后的孩子。从代码角度上来讲:遍历nums,从头开始用count累积,如果count一旦加上nums[i]变为负数,那么。基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。个人觉得代码随想录的答案太不容易想了,容易出错。,所以大家了解贪心算法 就了解它没有规律的本质就够了。学完贪心之后再去看动态规划,就会了解贪心和动规的区别。不用花心思去研究其规律, 没有思路就立刻看题解。

2023-03-31 15:35:28 52

原创 代码随想录|day29|回溯算法part05* 491.递增子序列* 46.全排列* 47.全排列 II

本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容。去看了视频,发现我自己的横向去重部分的代码,还是建立在数组排序之上的,而这里给出的原数组根本没有排序,也就是说用。本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。排列问题,每次都要从头开始搜索,例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1。仍然不对,继续修改。//可重,要先排序,对于横向展开的选择再去重,和组合思路一样。

2023-03-29 15:28:12 167

原创 代码随想录|day28|回溯法---- 93.复原IP地址 ● 78.子集 ● 90.子集II

自己的做法,其中判断断的字符子串是否有效参考了代码随想录的代码,自己真不一定做出来。有重复元素,先排序,后去重。只计算第一个元素的树枝,其余基本和前面的组合题一样。代码随想录里直接在原字符串进行修改,还用了erase,比较危险。子集和组合问题非常像,只是结束条件不一样。

2023-03-28 21:44:49 45

原创 代码随想录|day26|回溯算法part03● 39. 组合总和● 40.组合总和II● 131.分割回文串

也就是隔板法,比如string.size===16,则有15个空位,第一块隔板在15个空位上随便选一个,然后再放第二块隔板(第二块隔板在第一块隔板后),再放第三块隔板(第三块隔板在第二块隔板后)。因为下一层是上一层隔板的位置,总之看代码随想录,我自己的逻辑还是稍微模糊。一次对,同样在进入下次循环时,注意startindex是从j开始,还是j+1开始。今天的练习基本就是回溯法组合问题,这一节只要看labuladong即可。树的每一层,是检验放一块隔板、两块隔板。我的思路是没有,直接看了代码随想录。

2023-03-28 19:46:33 403

原创 代码随想录|day25|回溯算法part02----● 216.组合总和III● 17.电话号码的字母组合

第二个剪枝部分是 sum>targetsum,则return。剪枝,第一个剪枝部分是剪枝start_index。没有剪枝,组合进阶版。

2023-03-28 15:40:27 61

空空如也

空空如也

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

TA关注的人

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