随想录二刷Day14——栈与队列
创始人
2024-05-29 09:06:08
0

文章目录

  • 栈与队列
    • 6. 逆波兰表达式求值
    • 7. 滑动窗口最大值
    • 8. 前 K 个高频元素

栈与队列

6. 逆波兰表达式求值

150. 逆波兰表达式求值

思路:
遇到数字压栈,遇到符号弹出两个数做运算,算完的结果放回栈中。

class Solution {
public:int evalRPN(vector& tokens) {stack stk;int num1, ans;for (string s : tokens) {if ( s.length() > 1 || (s[0] <= '9' && s[0] >= '0') ) {stk.push(stoi(s));} else {char ch = s[0];switch(ch) {case '+':num1 = stk.top(); stk.pop();ans = stk.top() + num1; stk.pop();break;case '-':num1 = stk.top(); stk.pop();ans = stk.top() - num1; stk.pop();break;case '*':num1 = stk.top(); stk.pop();ans = stk.top() * num1; stk.pop();break;case '/':num1 = stk.top(); stk.pop();ans = stk.top() / num1; stk.pop();break;default:break;}stk.push(ans);}}return stk.top();}
};

7. 滑动窗口最大值

239. 滑动窗口最大值

思路:
经典的单调队列:
维护队列中是窗口内的单调不增序列。
队首维护的是窗口内的最大值,当一个元素要压入时,判断其是否小于队尾元素,不满足则将队尾比其小的元素全部弹出,再压入该元素。
一个元素何时退出单调队列?当该元素退出滑动窗口时,从队首取走当前元素(若不在则不需要考虑)。

class Solution {
private:class MyQueue {public:deque que;void pop(int num) {if (!que.empty() && num == que.front()) {que.pop_front();}}void push(int num) {while (!que.empty() && num > que.back()) {que.pop_back();}que.push_back(num);}int front() {return que.front();}};public:vector maxSlidingWindow(vector& nums, int k) {MyQueue que;vector result;for (int i = 0; i < k; i++) {que.push(nums[i]);}result.push_back(que.front());for (int i = k; i < nums.size(); i++) {que.pop(nums[i - k]);que.push(nums[i]);result.push_back(que.front());}return result;}
};

8. 前 K 个高频元素

347. 前 K 个高频元素

思路:

  1. 统计每个数字出现的次数
  2. 维护一个有 k 个值得小根堆(堆中存放数值,排序依据是数值出现次数)
  3. 超过 k 个值时,将堆顶(即堆中出现次数最少的元素)弹出,压入新的值,最后剩下的 k 个数值就是出现次数最大的 k 个数值。
    利用数据结构 优先队列 实现小顶堆。
class Solution {
public:class mycmp {public:bool operator()(const pair& lhs, const pair& rhs) {return lhs.second > rhs.second; // 小根堆}};vector topKFrequent(vector& nums, int k) {vector result(k);unordered_map mp;for (int num : nums) {mp[num]++;}priority_queue, vector>, mycmp> pri_que;for (unordered_map::iterator it = mp.begin(); it != mp.end(); it++) {pri_que.push(*it);if (pri_que.size() > k) {pri_que.pop();}}for (int i = k - 1; i >= 0; i--) {result[i] = pri_que.top().first;pri_que.pop();}return result;}
};

相关内容

热门资讯

初中说明文作文(优质6篇) 初中说明文作文 篇一绿色出行的意义与方法随着城市化进程的加快,汽车的数量不断增加,交通拥堵和空气污染...
初一生活句子精选375句 初一生活句子 精选120句1. 除了你的母亲和你爱的女人,不要多余的给任何女人面子,男女不是平等的么...
生命的长河初中作文(通用3篇... 生命的长河初中作文 篇一生命的长河初中作文生命是一条绵延不绝的长河,每个人都在这条长河中行走,流淌着...
什么是幸福的作文【精彩6篇】 什么是幸福的作文 篇一幸福是什么?这是一个让人们思考已久的问题。对于每个人来说,幸福的定义可能是不同...
初一的幸福作文600字(最新... 初一的幸福作文600字 篇一初一的幸福初一,对于每个学生来说都是一个特殊的年级。对我来说,初一是一个...
初一写景作文800字大全【通... 初一写景作文800字大全 篇一初一写景作文800字大全 篇一:春天的花海春天到了,大自然万物复苏,到...
红旗下的蛋初三军训作文【通用... 红旗下的蛋初三军训作文 篇一初中生活即将进入尾声,作为一名初三学生,我们迎来了期待已久的军训。那是一...
我的好朋友七年级作文(精选6... 我的好朋友七年级作文 篇一我有一个好朋友,她的名字叫小芳。我们从小学一年级开始就是同班同学,从那时起...
秉烛夜游叹沧桑初一作文(推荐... 秉烛夜游叹沧桑初一作文 篇一秉烛夜游叹沧桑初一作文初一的晚上,月光下的街道显得异常寂静,我独自一人拿...
汉初三杰名人故事【优选3篇】 汉初三杰名人故事 篇一汉初三杰之一:韩信的崛起与背叛韩信,字子长,是汉初三杰之一。他出身贫寒,但凭借...
我的读书生活初三700字作文... 我的读书生活初三700字作文 篇一我的读书生活初三700字作文初三是我的读书生活中一个重要的阶段。在...
初三话剧剧本作文范文【优秀6... 初三话剧剧本作文范文 篇一标题:《勇往直前》人物角色:李明:男主角张婷:女主角王涛:李明的朋友老师:...
我害怕失去初三作文450字【... 我害怕失去初三作文450字 篇一初三,对于每一个初中生来说都是一个非常重要的阶段。初三是我们升入高中...
初三英语范文六十字10篇【精... 初三英语范文六十字10篇 篇一:My Dream JobI have always dreamed ...
春游的作文【优选6篇】 春游的作文 篇一春游是每年春天最令人期待的活动之一。春天的阳光明媚,花草繁茂,正是出游的好时光。我和...
初三记叙文作文600字【通用... 初三记叙文作文600字 篇一:追寻梦想的足迹初三,是每个初中生都期待已久的一年。初三的生活注定是紧张...
超级动物园作文1000字初三... 超级动物园作文1000字初三 篇一超级动物园我曾经在电视上看到过一座神奇的超级动物园,它位于一个广袤...
寒假初三作文(优选6篇) 寒假初三作文 篇一假期收获寒假即将结束,回顾这个假期,我感到非常充实和满足。在这个寒假里,我不仅度过...
初三来了作文【通用6篇】 初三来了作文 篇一初三来了,是每个初中生都期待又紧张的时刻。初三意味着即将迎来中考,这是人生中的一次...
写初三校园生活的作文500字... 篇一:初三校园生活的精彩瞬间初中生活是每个人成长道路上的重要阶段,初三则是初中生活的最后一年。在这个...