Day14 | 栈和队列 滑动窗口最大值&&前K个高频元素
代码随想录 | Day14 | 栈和队列:滑动窗口最大值&&前K个高频元素主要学习内容: 1.使用单调队列解决滑动窗口 2.使用优先级队列 3.map的第二个元素的排序问题 239.滑动窗口最大值239. 滑动窗口最大值 - 力扣(LeetCode) 思路:使用单调队列维护一个单调递减的队列,具体看这个例子 举例子来说明: nums={2,1,4,2,3,2},k=3 假设你在坐飞机,你的面前是要飞越的山,数组就是它们的高度,你的视野范围即你能看到的山的数量是滑动窗口大小,题目要求是,你想要找到视野范围内最高的山并且记录下来 单调队列的模拟过程 首先是 2 1进入你的眼帘,我们把2 1入队 当4进入你的视野后,2和1就再也不可能是你视野中最高的山了 所以我们在 2 1 4中删去 2 1留下4,现在队中只剩下4,所以你在第一块视野内最高的山峰是4,记录下来 接着飞机飞到了2 2有可能成为你视野中的最大值,因为4可能会离开你的视野,即滑动窗口内已经不包含4了,所以入队 此时4仍然是视野内最高的山峰,记录下来 接着飞到了...
Day13 | 栈和队列 有效的括号&&删除字符串中的所有相邻重复项
代码随想录 | Day13 | 栈和队列:有效的括号&&删除字符串中的所有相邻重复项20.有效的括号20. 有效的括号 - 力扣(LeetCode) 思路: 分为2种情况 第一,遇到左括号类型,就入栈对应的右括号 第二,遇到右括号类型,看栈顶是否是对应的左括号,是的话就就弹出栈顶元素就行,不是的话就直接false,说明前面的左括号少了,而咱们多出来的这个右括号类型后面再也不可能被匹配掉 1234567891011121314151617181920212223class Solution {public: bool isValid(string s) { stack<char> st; for(auto c:s) { //遇到左括号 if(c=='(') st.push(')'); else if(c=='[') ...
Day12 | 复习哈希表&&字符串
代码随想录 | Day12 | 复习哈希表&&字符串具体做法,全都重写一遍,此篇记录仍不太会的题目 Day 07 202. 快乐数 - 力扣(LeetCode) 写成先判断是不是循环后判断是不是1了,导致如果只有一个数1的话会判断为循环。。 1. 两数之和 - 力扣(LeetCode) 又犯了第一次的错误,要先看符不符合条件在添加而不是一股脑的全添加,全添加会导致如果第二次加的和第一次的一样那么第二次的就不会加入其中 Day 08 454. 四数相加 II - 力扣(LeetCode) 忘记统计组合出现的次数,只顾着有没有出现过,从而少了组数 15. 三数之和 - 力扣(LeetCode) 最后忘记了收缩快慢指针 18. 四数之和 - 力扣(LeetCode) 第二个for给第二个元素去重时不应该直接返回res,而是应该break 151. 反转字符串中的单词 - 力扣(LeetCode) Day 09 去除空格的双指针过程有错误,这个很不熟练,要多加练习 难的还是。。。。。(失落)
侯捷 C++11 新特性 学习笔记
C++11 新特性 学习笔记1.Variadic TemplatesC++11支持函数模板的默认模板参数在 C++98/03 标准中,类模板可以有默认的模板参数,如下: 12345template <typename T, typename U = int, U N = 0>struct Foo{ // ...}; 但是却不支持函数的默认模板参数: 12345template <typename T = int> // error in C++98/03: default template argumentsvoid func(){ // ...} 现在这一限制在 C++11 中被解除了。上面的 func 函数在 C++11 中可以直接使用,代码如下: 12345int main(void){ func(); //T = int return 0;} 此时模板参数 T 的类型就为默认值...
Day11 | 复习数组&&链表
代码随想录 | Day11 | 复习数组&&链表具体做法,全都重写一遍,此篇记录仍不太会的题目 Day 01 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode) 忘记了在相等情况下加标记这一做法,想着按照原来找左右边界的做法来做,其实更推荐的是加标记,既好记住又不容易错 Day 02 26. 删除有序数组中的重复项 - 力扣(LeetCode) 需要双指针要想双指针定义,如何初始化,快慢指针向前移动的条件! 904. 水果成篮 - 力扣(LeetCode) 没搞清楚滑动窗口后端后移的条件,其实就没啥条件,移动就完事了,如果种类超过了2种会由循环进行处理,不用理会 Day 04 54. 螺旋矩阵 - 力扣(LeetCode) 忘了最后的条件要写res.size()>n*m了 Day 06 24. 两两交换链表中的节点 -...
Day10 | 字符串 KMP算法&&找出字符串中第一个匹配项的下标&&重复的子字符串
代码随想录 | Day10 | 字符串:KMP算法&&找出字符串中第一个匹配项的下标&&重复的子字符串主要学习内容: 1.KMP算法 2.应用KMP算法解题 KMP算法关键点: 1.前后缀定义 前缀:包含首字母的所有子串 后缀:包含尾字母的所有子串 2.最长的相等的前后缀的定义 当前字母的最长的相等前后缀看的是不包含该字母的前面的字符串 1234举例:a a b a a ff的最长的相等的前后缀看的是a a b a a 即为2相等的最长前缀和后缀分别是 a a 和 a a 3.next数组 作用是记录当前的字符如果不匹配那么下一次开始匹配的位置 而最长的相等的前后缀的长度就是下一次开始匹配的位置 12345举例:模式串:a a b a a b a a f 匹配串:a a b a a f ...
Day09 | 字符串 反转字符串&&反转字符串II&&反转字符串里的单词
代码随想录 | Day09 | 字符串:反转字符串&&反转字符串II&&反转字符串里的单词主要学习内容: 1.双指针操作字符串 2.reverse函数的使用 344.反转字符串344. 反转字符串 - 力扣(LeetCode) 可以调用reverse反转字符串函数 解法:双指针123456789101112class Solution {public: void reverseString(vector<char>& s) { for(int i=0;i<s.size()/2;i++) swap(s[i],s[s.size()-i-1]); /* for (int i = 0, j = s.size() - 1; i < s.size()/2; i++, j--) { swap(s[i],s[j]); */ ...
Day08 | 哈希表 四数相加II&&赎金信&&三数之和&&四数之和
代码随想录 | Day08 | 哈希表:四数相加II&&赎金信&&三数之和&&四数之和主要学习内容: 1.哈希表的使用 2.数量大于2的数组的话将两个数组加和转为一个数组进行哈希表的查找即可 3.双指针的用法 搞清楚双指针的定义和双指针移动条件 454.四数相加II454. 四数相加 II - 力扣(LeetCode) 解法:哈希表思路: nums1中元素为a nums2中元素为b nums3中元素为c nums4中元素为d 题目不要求去重则只需要统计a+b出现的次数 map的key为a+b,value为出现的次数 然后遍历3和4数组统计0-(c+d)在哈希表中出现的次数然后相加即可 1234567891011121314151617class Solution {public: int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3,...
Day07 | 哈希表 有效的字母异位词&&两个数组的交集&&快乐数
代码随想录 | Day07 | 哈希表:有效的字母异位词&&两个数组的交集&&快乐数主要学习内容:1.哈希表的使用2.set的相关操作,find和count函数 242.有效的字母异位词242. 有效的字母异位词 - 力扣(LeetCode) 解法:哈希表思路:map容器一个记录字符一个记录数量不一样直接输出false即可 123456789101112131415161718192021222324252627282930313233class Solution {public: bool isAnagram(string s, string t) { if(s.size()!=t.size()) return false; unordered_map<char,int> ps; unordered_map<char,int> pt; for(auto c:s) ps[c]++; ...
Day06 | 链表 两两交换链表中的结点&&删除链表的倒数第N个结点&&链表相交&&环形链表II
代码随想录 | Day06 | 链表:两两交换链表中的结点&&删除链表的倒数第N个结点&&链表相交&&环形链表II主要学习内容: 1.双指针操作链表 2.哈希表在链表里的使用(表示唯一行可以存储地址) 24.两两交换链表中的结点24. 两两交换链表中的节点 - 力扣(LeetCode) 注:交换过程有多种不一定非得是图上的 错误写法错误原因 1.没有用两个结点前面的那个结点作为媒介 2.cur和pre交换完以后没有将两结点前面的结点连接到cur上(事实上也没法连接就是了) 123456789101112131415161718192021222324class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode * t= new ListNode; t->next=head; if((!head)||(!head->next)) return...













