150. 逆波兰表达式求值
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> st;
long long left,right;
for(int i=0;i<tokens.size();i++)
{
if(tokens[i]!="+"&&tokens[i]!="-"&&tokens[i]!="*"&&tokens[i]!="/")
{
st.push(stoll(tokens[i]));
}
else if(!st.empty()&&tokens[i]=="+")
{
right=st.top();
st.pop();
left=st.top();
st.pop();
st.push(left+right);
}
else if(!st.empty()&&tokens[i]=="-")
{
right=st.top();
st.pop();
left=st.top();
st.pop();
st.push(left-right);
}
else if(!st.empty()&&tokens[i]=="*")
{
right=st.top();
st.pop();
left=st.top();
st.pop();
st.push(left*right);
}
else
{
right=st.top();
st.pop();
left=st.top();
st.pop();
st.push(left/right);
}
}
return st.top();
}
};
239. 滑动窗口最大值
class Solution {
private:
class Myqueue{
public:
deque<int> que;
void push(int value)
{
while(!que.empty()&&que.back()<value)
{
que.pop_back();
}
que.push_back(value);
}
void pop(int value)
{
if(!que.empty()&&que.front()==value)
que.pop_front();
}
int getmax()
{
return que.front();
}
};
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> res;
Myqueue que;
for(int i=0;i<k;i++)
{
que.push(nums[i]);
}
res.push_back(que.getmax());
for(int i=k;i<nums.size();i++)
{
que.pop(nums[i-k]);
que.push(nums[i]);
res.push_back(que.getmax());
}
return res;
}
};
347. 前 K 个高频元素
class Solution {
public:
static bool cmp(pair<int,int> &a,pair<int,int> &b)
{
return a.second>b.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
vector<int> res;
unordered_map<int,int> map;
for(int i=0;i<nums.size();i++)
{
map[nums[i]]++;
}
vector<pair<int,int>> tmp(map.begin(),map.end());
sort(tmp.begin(),tmp.end(),cmp);
for(auto x:tmp)
{
res.push_back(x.first);
k--;
if(k<=0) break;
}
return res;
}
};
需要重新做的题目
239. 滑动窗口最大值
347. 前 K 个高频元素
需要复习的知识
字符串转long long:stoll();
deque和queue区别;
map的value用sort排序(347.前k个高频元素)
大顶堆和小顶堆的定义和使用