- 博客(53)
- 收藏
- 关注
原创 代码随想录首刷总结
回溯:基本思路就是三步:终止条件,如果遍历(for),以及要不要做valid验证。贪心算法:把当前的问题转化成常见的问题,比如变成状态判断,数字比较等等。Dp: 代表含义->递推公式->初始化->遍历顺序->validate。其实总体来说题目都是有模式可循的,但是细节上还是要把握把握。栈与队列:配对消消乐/hashmap的辅助排序。字符串: 用two pointer/KMP。单调栈: 用来计算data的变化。链表: 快慢指针,指针变动。哈希表:多用于元素查找。二叉树:dfs,bfs。数组:多用于元素查找。
2023-05-17 00:57:39
51
原创 第六十天|单调栈
这道题其实和42题接雨水是相似的,区别就是接雨水是<进行append 这道题是相反的.这是因为那道题是算空的面积,这道题算的是交集中的面积,所以两者是相反的.其他的思路都是一样的.当相等的时候要先pop在append.在对于数组的处理上要一开始insert一个0要不然会忽略第一个元素.今天是最后一天,还是单调栈。
2023-05-17 00:44:26
39
原创 第五十九天|单调栈
第三种就是用单调栈,基本思路还是上述思路,只不过用单调栈去实现.即nums[i]如果比当前stack的最后一个index对应的值小,则把i放入stack.如果一样则pop上一个存当前的.如果大则不断取出根据左右边界算出值(w*h)用双指针法可以优化上一个方法.基本思路就是左右两个指针分别指向第一个和最后一个index,然后比较index 对应的value来确定移动那边(移动小的一边).额外要用两个变量存左右边的最大值用来后续的计算。这道题比较难.我们先从最简单的方法入手。
2023-05-12 02:58:35
50
原创 第五十八天|单调栈
这道题就是典型的可以用单调栈的值,对于每个元素来说,如果当前值比stack的最后一个index对应的值小,则放入形成栈底到栈顶的递减(用来求next greater value).然后通过index的差值表示隔了几天。这道题有相似性,需要注意的是在对nums2进行单调栈处理时,只有要pop的时候才涉及到找nums1中对应的值.且直接改值,不用算index 的差值,因为本题是求next greater value并不是差了多少天。
2023-05-11 12:42:34
49
原创 第五十七天|dp
初值来说除了dp[i][i]都是1其他的都是0,因为同一个字母的最长回文字串为1。然后就是递推公式,如果s[i]和s[j]相等,则dp[i][j]和dp[i+1][j-1]有关,等于他加上2.如果不等则取dp[i][j-1]和dp[i+1][j]的最大值即可。最终返回的是右上角的值。总数用一个变量记录。那么很显然如果s[i]等于s[j],才可能是回文,且是回文的要求是dp[i+1][j-1]也是true,或者本身i和j相差小于1.遍历顺序上是从下往上,从左往右,且只记录一半即可即j从i到len(s)遍历。
2023-05-10 11:55:45
49
原创 第五十六天|dp
递推公式还是和s[i-1]和j[i-1]是否相等有关.如果相等则dp[i][j]继承dp[i-1][j-1].如果不等,则需要考虑三种情况,一种是删除:,所对应的就是dp[i][j-1]+1.还有一种是增加,对应的就是删除t,那么对应的就是dp[i-1][j]+1.除此之外. 还有replace操作,对应的就是dp[i-1][j-1]+1,三者取最小即可。首先dp[i][j]代表的是s中的到i-1为止最少匹配到t的j-1的字符所需要的最少操作次数。这道题本质上和上一道题是一样的,
2023-05-09 11:14:51
28
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人