代码随想录算法训练营第十二天|150.逆波兰表达式求值、239.滑动窗口最大值、347.前k个高频元素
1.代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素2.代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II3.代码随想录算法训练营第四天| 203. 移除链表元素、707.设计链表、206.反转链表4.代码随想录算法训练营第五天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交(同160题)、142.环形链表Ⅱ5.代码随想录算法训练营第六天| 242. 有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和6.代码随想录算法训练营第七天| 454. 两数相加Ⅱ、383.赎金信、15.三数之和、18.四数之和7.代码随想录算法训练营第八天|344.反转字符串、541.反转字符串Ⅱ、54.替换数字(卡码网是真滴不好用)8.代码随想录算法训练营第九天|151.反转字符串中的单词、55.右旋字符串、28.找出字符串中第一个匹配项的下标、459.重复的子字符串9.代码随想录算法训练营第十一天|232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项
10.代码随想录算法训练营第十二天|150.逆波兰表达式求值、239.滑动窗口最大值、347.前k个高频元素
11.代码随想录算法训练营第十三天|今天量大管饱144、145、94、102、107、199、637、429、515、116、117、104、11112.代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大深度 (优先掌握递归)、111.二叉树的最小深度13.代码随想录算法训练营第十五天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数这三道题倒是有点意思的
150题还好 就是读元素 然后进行相应的操作
1 class Solution { 2 public: 3 int evalRPN(vector<string>& tokens) { 4 vector<int>Stack; 5 int tmp; 6 for(int i=0;i<tokens.size();i++){ 7 if(tokens[i] =="+"){ 8 tmp = Stack[Stack.size()-2]+Stack[Stack.size()-1]; 9 Stack.pop_back(); 10 Stack.pop_back(); 11 Stack.push_back(tmp); 12 } 13 else if(tokens[i] =="-"){ 14 tmp = Stack[Stack.size()-2]-Stack[Stack.size()-1]; 15 Stack.pop_back(); 16 Stack.pop_back(); 17 Stack.push_back(tmp); 18 } 19 else if(tokens[i] =="*"){ 20 tmp = Stack[Stack.size()-2]*Stack[Stack.size()-1]; 21 Stack.pop_back(); 22 Stack.pop_back(); 23 Stack.push_back(tmp); 24 } 25 else if(tokens[i] =="/"){ 26 tmp = Stack[Stack.size()-2]/Stack[Stack.size()-1]; 27 Stack.pop_back(); 28 Stack.pop_back(); 29 Stack.push_back(tmp); 30 } 31 else{ 32 Stack.push_back(stoi(tokens[i])); 33 } 34 } 35 return Stack.back(); 36 } 37 };
239滑动窗口我一开始理解错题目了,以为是求滑动窗口的和的最大值,就离谱,然后琢磨半天用单调队列处理。
1 class Solution { 2 public: 3 vector<int> maxSlidingWindow(vector<int>& nums, int k) { 4 deque<int> dq; // 双端队列,用于存储窗口内元素的索引 5 vector<int> result; // 存储每个窗口的最大值 6 7 // 处理初始的第一个窗口 8 for (int i = 0; i < k; ++i) { 9 // 对滑入的元素进行入队操作,保持队列单调递减 10 while (!dq.empty() && nums[dq.back()] < nums[i]) { 11 dq.pop_back(); // 移除所有小于当前元素的元素 12 } 13 dq.push_back(i); // 将当前元素的索引加入队列 14 } 15 result.push_back(nums[dq.front()]); // 第一个窗口的最大值 16 17 // 处理剩余的元素 18 for (int i = k; i < nums.size(); ++i) { 19 // 移除滑出窗口的元素 20 if (!dq.empty() && dq.front() == i - k) { 21 dq.pop_front(); 22 } 23 24 // 对滑入的元素进行入队操作,保持队列单调递减 25 while (!dq.empty() && nums[dq.back()] < nums[i]) { 26 dq.pop_back(); 27 } 28 dq.push_back(i); // 将当前元素的索引加入队列 29 30 // 当前窗口的最大值 31 result.push_back(nums[dq.front()]); 32 } 33 34 return result; 35 } 36 };
347题只会写呆方法,哈希再排序,堆是真不会。
1 class Solution { 2 public: 3 vector<int> topKFrequent(vector<int>& nums, int k) { 4 // 哈希表记录每个元素的出现次数 5 unordered_map<int, int> frequencyMap; 6 for (int num : nums) { 7 frequencyMap[num]++; 8 } 9 10 // 将哈希表中的元素转存到一个vector中进行排序 11 vector<pair<int, int>> freqVec(frequencyMap.begin(), frequencyMap.end()); 12 13 // 按照出现次数从大到小进行排序 14 sort(freqVec.begin(), freqVec.end(), [](const pair<int, int>& a, const pair<int, int>& b) { 15 return a.second > b.second; 16 }); 17 18 // 输出前k个高频元素 19 vector<int> result; 20 for (int i = 0; i < k; ++i) { 21 result.push_back(freqVec[i].first); 22 } 23 24 return result; 25 } 26 };
自在飞花轻似梦
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端