1.逆波兰表达式
题目链接/文章讲解/视频讲解:代码随想录
代码:
class Solution {
public:int evalRPN(vector<string>& tokens) {stack<long long> st;for(int i = 0; i < tokens.size(); i++){if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/"){long long num1 = st.top();st.pop();long long num2 = st.top();st.pop();if(tokens[i] == "+") {st.push(num2 + num1);}else if(tokens[i] == "-"){st.push(num2 - num1);}else if(tokens[i] == "*"){st.push(num2 * num1);}else if(tokens[i] == "/"){st.push(num2 / num1);}}else{st.push(stoll(tokens[i]));}}int result = st.top();st.pop();return result;}
};
note:
1.是num2 运算符 num1
2.字符串转longlong 是stoll函数
2.滑动窗口最大值
题目链接/文章讲解/视频讲解:代码随想录
代码:
class Solution {
private:class MyQueue{public:deque<int> que;void pop(int value){if(!que.empty() && value == que.front()){que.pop_front();}}void push(int value){ // 保证队列从大到小while(!que.empty() && value > que.back()){que.pop_back();} // 把比当前数值小的元素全部弹出que.push_back(value);}int front(){return que.front();}};
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {MyQueue que;vector<int> 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;}
};
note:单调栈的构建 就是每次添加元素的时候都进行消消乐 直到栈顶元素没有比它大的了
3.前k个高频元素
题目链接/文章讲解/视频讲解:代码随想录
仿函数的介绍:
bool operator()(const pair<int,int> lhs, const pair<int,int> rhs)_class mycomparision{ public: bool operator()(const-CSDN博客
class Solution {
public:// 小顶堆class mycomparison{bool operator()(const pair<int,int>& lhs,const pair <int,int>& rhs){return lhs.second > rhs.second;}};vector<int> topKFrequent(vector<int>& nums, int k) {// 统计元素出现频率unordered_map<int,int> map;for(int i = 0; i < nums.size(); i++){map[nums[i]]++;}// 定义一个大小为k的小顶堆prority_queue<pair<int,int>,vector<pair<int,int>>,mycomparison> pri_que;for(unordered_map<int,int>::iterator it = map.begin();it != map.end(); it++){pri_que.push(*it);if(pri_que.size() > k){pri_que.pop();}}// 找出前k个高频元素 小顶堆先弹出的是最小的,所以倒叙来输出到数组vector<int> result(k);for(int i = k - 1; i >= 0; i--){result[i] = pri_que.top().first;pri_que.pop();}return result;}
};
4.总结
代码随想录