摘要: 基本思想: 本来想用DFS加剪枝,发现不太好写,此次题目没想到还是采用dp思想; DP方程的问题: 主要难在方程的构建,主旨思想是通过区间判别; 其中dp为二维数组,其中dp[i][j]为s[0:i]和t[0:j]中元素相等个数; 对于0~i个元素,如果s[i]=t[j],可以产生两种0-i-1子序 阅读全文
posted @ 2021-03-17 10:13 暮云林凌 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 使用传统栈后缀表达式+弹栈计算,爆时间爆内存,垃圾解法; map<char, int>mp; vector<string>bs; void init() { mp['+'] = 0; mp['-'] = 0; mp['*'] = 1; mp['/'] = 1; } void back_string( 阅读全文
posted @ 2021-03-11 09:39 暮云林凌 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 计算器得简单题,本来想用后缀+栈来解决,但是没想到只涉及加减和括号可以直接用括号展开得思想进行解决; 主要方法是使用栈来记录当前整个括号内的值; 对字符串内的符号进行记录,为括号展开作准备; 例如:-(2+1) 记录负号之后,遇到左括号直接压栈,此时取栈顶符号进行+,-号判断时,可以达到相反的判断逻 阅读全文
posted @ 2021-03-10 10:26 暮云林凌 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 简单题,但是当时第一反应没有想到比较好用的数据结构,最后才发现用栈比较合理; 如果不用栈,直接采用两两对比使用递归来做: class Solution { public: string fun(string s) { if (s.size() <= 1) return s; string ss = 阅读全文
posted @ 2021-03-09 20:48 暮云林凌 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 困难题,先想着DP扫描,但是会爆栈; 主体思想仍然采用滑动窗口来进行; 但是对于该题目,有一个比较新的点,要利用脑经急转弯思想把问题转换一下; 对于正好为K个不同元素组成的最长字符串可以转换为: 最多由K个不同元素组成的字符串-最多由K-1个不同元素组成的字符串; (这样可以有效的降低复杂度,使得单 阅读全文
posted @ 2021-02-09 20:52 暮云林凌 阅读(84) 评论(0) 推荐(0) 编辑
摘要: DP问题设计两个问题: 1.DP数组的抉择; 2.DP中状态转换方程; 【湍流DP问题】 【子序列DP问题】 阅读全文
posted @ 2021-02-09 00:10 暮云林凌 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 哎。。。滑动窗口的题目,自己猜到了要用滑动窗口,但是没做出来; 这道题目用滑动窗口和DP都可以; 滑动窗口: 如果采用滑动窗口的记录前一位标志位,right和right-1比较,会丢失一部分序列; 例如:9,4,2,10,7,8; 湍流数列应该为:4,2,10,7,8; 但是如果采用我的滑动窗口比较 阅读全文
posted @ 2021-02-08 23:34 暮云林凌 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 贪心问题,要主要贪心的是什么; 【求是否存在更改一次的递增序列】 阅读全文
posted @ 2021-02-07 17:30 暮云林凌 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 一道简单题把自己考成了傻逼。。。 贪心问题,随便加条件也只是个贪心问题,重要的是贪心什么; 这道题需要前瞻后顾,实际问题存在两种可能; 对于1,4,2,5; 对于该序列的调整无非就是两种情况: 1,2,2,5; 1,4,4,5; 可以看到两种情况都可以满足; 而对于: 1,4,2,3; 有两种调整方 阅读全文
posted @ 2021-02-07 17:29 暮云林凌 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 可以通过滑动窗口转化为一个最长序列求和问题,旨在在指定值下,找到总和小于该值的最长序列; 如果使用dp动态规划,但是会超时; class Solution { public: vector<vector<int>>dp; int equalSubstring(string s, string t, 阅读全文
posted @ 2021-02-06 17:34 暮云林凌 阅读(97) 评论(0) 推荐(0) 编辑