- 博客(55)
- 资源 (1)
- 收藏
- 关注
原创 算法训练营day59_单调栈(3.24提前打)
(vector用insert插入,不能直接赋值,因为大小规定了,会越界,要是数组的话,提前开够了空间,不会越界)当前栈顶是凹的部分,当前栈顶左边右边都比它大,计算(min(左右高度)-当前高度)*(距离),这个计算的就是当前高度上面能存的雨水;这道题就是对于每个柱子,找出左边最大的与右边最大的,取小值,再减去当前柱子高度就是当前柱子的贡献值;,左边与右边都包括自己,这样的话就算找不到比自己大的,也会自己-自己,贡献值为0;,最后栈里只有一个元素的时候,就不能算了,因为它没有左边的,不是凹槽,存不了水;
2023-03-25 11:22:26
470
原创 算法训练营day58_单调栈(3.24提前打)
倒序遍历,看一下有没有右边第一个比nums2[goal]大的元素;在nums2中找到nums1[i]的位置;刚开始忘了怎么写了,直接单调队列过了。找到右边第一个比自己大的,用单调栈;这道题暴力都可以解,很简单;
2023-03-24 22:09:30
619
1
原创 算法训练营day49_动态规划
与上题的差别在于,原先持有股票买的状态是0-prices[i](因为只能买一次),现在变成了f[i-1] [1]-prices[i] (累积起来了);枚举每一天,更新ans,若小于买入,更新买入;上题是只能买卖一次;
2023-03-21 19:22:18
104
原创 算法训练营day57_动态规划(3.18提前写)
遍历顺序关键要把小状态提前算出来,故本题i需要倒序,j从左到右,还有个坑点就是j必须从i开始,因为区间[i,j];如果s[i]==s[j],看[i+1,j-1],因为可能有交叉,需要分类讨论;**本题是从左下转移右上,故i是倒序,j是顺序; 如果i-j有>=3个字符,看f[i+1] [j-1];如果s[i]==s[j],=[i+1,j-1]+2;f(i,j)表示[i,j]子序列最长回文子序列的 长度;f(i,j)表示[i,j]子串是否为回文子串; 比较(i+1,j)与(i,j+1);
2023-03-18 23:37:11
295
原创 算法训练营day56_动态规划(3.18提前写)
若不等,要么删s[i],要么删t[j],从两个地方转移过来,看哪个步数少;求最小,全初始为大值,f[0] [0]为0,并且s的前i个到t的前0个是i步,t的前i个到s的前0个是0步;给定两个字符串s,t,使s变成t的最小步数(本题相对于上题,只能s->t,s除了删除,还可以插入,替换);求最小,全初始为大值,并且s的前i个到t的前0个是i步,t的前i个到s的前0个是0步;f(i,j)表示使s的前i个,t的前j个相等的最小步数;f(i,j)表示使s的前i个,t的前j个相等的最小步数;
2023-03-18 23:36:15
272
原创 算法训练营day53_动态规划(3.17提前写)
a中与b中相同的数可以连接,又由于不能相交,所以相对顺序要一致,就是找A与B中相同的子序列,即公共子序列;之前贪心做过一次,贪心是每次都执行一个策略,只要和为负数就新开,不为负数就跟着;而本次用动态规划,是在过程中每次都从几个状态里择优;要求最大连接数,就是最长公共子序列长度;与最长公共子数组相比,多了俩转移情况;
2023-03-17 21:23:56
581
2015数模竞赛B题出租车数据
2022-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人