随笔分类 -  基础算法刷题记录

1 2 3 4 5 ··· 7 下一页
摘要:基本思想: 本来想用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 暮云林凌 阅读(98) 评论(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 暮云林凌 阅读(68) 评论(0) 推荐(0)
摘要:计算器得简单题,本来想用后缀+栈来解决,但是没想到只涉及加减和括号可以直接用括号展开得思想进行解决; 主要方法是使用栈来记录当前整个括号内的值; 对字符串内的符号进行记录,为括号展开作准备; 例如:-(2+1) 记录负号之后,遇到左括号直接压栈,此时取栈顶符号进行+,-号判断时,可以达到相反的判断逻 阅读全文
posted @ 2021-03-10 10:26 暮云林凌 阅读(74) 评论(0) 推荐(0)
摘要:简单题,但是当时第一反应没有想到比较好用的数据结构,最后才发现用栈比较合理; 如果不用栈,直接采用两两对比使用递归来做: class Solution { public: string fun(string s) { if (s.size() <= 1) return s; string ss = 阅读全文
posted @ 2021-03-09 20:48 暮云林凌 阅读(96) 评论(0) 推荐(0)
摘要:困难题,先想着DP扫描,但是会爆栈; 主体思想仍然采用滑动窗口来进行; 但是对于该题目,有一个比较新的点,要利用脑经急转弯思想把问题转换一下; 对于正好为K个不同元素组成的最长字符串可以转换为: 最多由K个不同元素组成的字符串-最多由K-1个不同元素组成的字符串; (这样可以有效的降低复杂度,使得单 阅读全文
posted @ 2021-02-09 20:52 暮云林凌 阅读(113) 评论(0) 推荐(0)
摘要:哎。。。滑动窗口的题目,自己猜到了要用滑动窗口,但是没做出来; 这道题目用滑动窗口和DP都可以; 滑动窗口: 如果采用滑动窗口的记录前一位标志位,right和right-1比较,会丢失一部分序列; 例如:9,4,2,10,7,8; 湍流数列应该为:4,2,10,7,8; 但是如果采用我的滑动窗口比较 阅读全文
posted @ 2021-02-08 23:34 暮云林凌 阅读(82) 评论(0) 推荐(0)
摘要:一道简单题把自己考成了傻逼。。。 贪心问题,随便加条件也只是个贪心问题,重要的是贪心什么; 这道题需要前瞻后顾,实际问题存在两种可能; 对于1,4,2,5; 对于该序列的调整无非就是两种情况: 1,2,2,5; 1,4,4,5; 可以看到两种情况都可以满足; 而对于: 1,4,2,3; 有两种调整方 阅读全文
posted @ 2021-02-07 17:29 暮云林凌 阅读(44) 评论(0) 推荐(0)
摘要:可以通过滑动窗口转化为一个最长序列求和问题,旨在在指定值下,找到总和小于该值的最长序列; 如果使用dp动态规划,但是会超时; class Solution { public: vector<vector<int>>dp; int equalSubstring(string s, string t, 阅读全文
posted @ 2021-02-06 17:34 暮云林凌 阅读(105) 评论(0) 推荐(0)
摘要:滑动窗口经典例题,从首尾选择元素; 之前自己的想法是直接对比首尾元素,直接求和就行,但是存在误区; 例如以下序列: 1,2,100,99,5,1; 如果选取三个数字,会选择1,5,2三个数字,但是应该选取1,5,99; 当然可以采用递归dfs,但是会存在爆栈问题; 当然也可以采用记忆法剪枝,但是还是 阅读全文
posted @ 2021-02-06 16:51 暮云林凌 阅读(53) 评论(0) 推荐(0)
摘要:之前想用回溯递归树怕爆栈,没想到真的可以。。。。 主体思想还是利用枚举当前前缀子串进行判定,如果是回文子串则进行后缀的下一次递归判定,如果不是回文子串,放弃当前枚举前缀,重新选取一个前缀; 如果采用dp进行回文子串的事先判定可能更快一点; 采用单纯回溯判定: class Solution { pub 阅读全文
posted @ 2021-02-04 17:33 暮云林凌 阅读(47) 评论(0) 推荐(0)
摘要:滑动窗口月简单题,没什么好说的,标记遍历对比即可; class Solution { public: double findMaxAverage(vector<int>& nums, int k) { double maxn = 0; int now = 0; for (int i = 0; i < 阅读全文
posted @ 2021-02-04 16:13 暮云林凌 阅读(39) 评论(0) 推荐(0)
摘要:滑动窗口月的Hard题,目前有两种解决的主流方案: 1.使用两个堆,一个大顶一个小顶,来计算平均值,C++使用的是priority_queue,即两个优先队列; 2.使用可自己调节的平衡二叉树,把时间和复杂度控制一定范围内,C++给出的是multiset; 针对于维护两个堆的思想: 建立两个堆,分别 阅读全文
posted @ 2021-02-03 16:59 暮云林凌 阅读(111) 评论(0) 推荐(0)
摘要:回溯树的问题,和之前的递归思想相同,但是从来没有做过相关总结; 总体来说,通过一个一个递归来进行枚举,每次传入flag标志数组进行记录,进行重复元素剔除,太久没刷有点没感觉; void find(vector<bool>& flag, vector<int>& mem, int x, int cou 阅读全文
posted @ 2021-01-31 17:05 暮云林凌 阅读(66) 评论(0) 推荐(0)
摘要:困难题,没有想到并查集的思想,并且很久不做有点生疏; 以前并查集都是针对于单个目标的次序排列问题,头一次遇到这种归类问题; 基础思想是判断两个字符串是否属于一类,但是这一个问题也蕴含了次序的问题; 例如,a,b,c; 有可能a,b相似,b,c相似,而a,c不相似; 也有可能a,c相似,b,c相似,a 阅读全文
posted @ 2021-01-31 16:21 暮云林凌 阅读(54) 评论(0) 推荐(0)
摘要:简单题,主要考察索引计算和字符遍历,没什么难度; vector<vector<int>> largeGroupPositions(string s) { vector<vector<int>> res; for (size_t i = 0; i < s.size();) { size_t index 阅读全文
posted @ 2021-01-05 07:56 暮云林凌 阅读(53) 评论(0) 推荐(0)
摘要:中等标签还以为有什么更厉害的解法,典型四指针一次遍历; 注意一下空结点的判定问题; ListNode* partition(ListNode* head, int x) { ListNode* h1 =new ListNode(-1); ListNode* h2 = new ListNode(-1) 阅读全文
posted @ 2021-01-04 21:45 暮云林凌 阅读(70) 评论(0) 推荐(0)
摘要:弱智题,没什么好说的; 五花八门写法:递归、枚举、打表、通项公式; int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; return fib(n - 1) + fib(n - 2); } 阅读全文
posted @ 2021-01-04 21:23 暮云林凌 阅读(74) 评论(0) 推荐(0)
摘要:Hard题目,之前也想到了从1开始遍历直接打表进行边界判断,但是一直设想的是寻找某种方法进行逐个元素的遍历,但是没有想到可以直接进行乘2边界判定; 值得注意的点是,看似最大边界是2的阶乘,其实不然; 如果nums数组中含有已经可以正常的元素,则边界会发生改变,究其原因题目中是指定每个元素只可以出现一 阅读全文
posted @ 2020-12-29 09:31 暮云林凌 阅读(134) 评论(0) 推荐(0)
摘要:简单题,没什么好说的,Hash数组+两次遍历可破; int firstUniqChar(string s) { for (int i = 0; i < s.size(); i++) { hashtable[s[i] - 'a']++; } int index = 0; for (int i = 0; 阅读全文
posted @ 2020-12-23 08:47 暮云林凌 阅读(88) 评论(0) 推荐(0)
摘要:中等难度题,如果使用最简单的层序遍历思想开数组层序遍历返回,空间复杂度会高一点; vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>>rvec; queue<TreeNode*>que; bool fla 阅读全文
posted @ 2020-12-22 08:47 暮云林凌 阅读(87) 评论(1) 推荐(0)

1 2 3 4 5 ··· 7 下一页