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(num1+num2);
else if(tokens[i]=="-") st.push(num2-num1);
else if(tokens[i]=="*") st.push(num1*num2);
else if(tokens[i]=="/") st.push(num2/num1);
}else
{
st.push(stoll(tokens[i]));
}
}
long long res=st.top();
return res;
}
};
要注意创建栈要使用int类型,而且string类型的数组不能用char c=tokens【i】,也不能用单引号,当string类型转换到long long类型时要使用stoll函数,char类型可以通过-'0'实现
class Solution {
private:
class MyQueue{
public:
deque<int> que;
void pop(int val)
{
if(!que.empty()&&val==que.front())
{
que.pop_front();
}
}
void push(int val)
{
while(!que.empty()&&que.back()<val)
{
que.pop_back();
}
que.push_back(val);
}
int front()
{
return que.front();
}
};
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
MyQueue que;
vector<int> res;
for(int i=0;i<k;i++)
{
que.push(nums[i]);
}
res.push_back(que.front());
for(int i=k;i<nums.size();i++)
{
que.pop(nums[i-k]);
que.push(nums[i]);
res.push_back(que.front());
}
return res;
}
};
自己创建一个双端队列,使用deque容器,两边都可以进行插入和删除
class Solution {
public:
//小顶堆比较法则
class mycomparison{
public:
bool operator()(const pair<int,int> &l,const pair<int,int> &r)
{
return l.second>r.second;
}
};
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int,int> mp;
//统计元素出现频率
for(int i=0;i<nums.size();i++)
{
mp[nums[i]]++;
}
priority_queue< pair<int, int>, // 元素类型
vector<pair<int, int>>, // 底层容器
mycomparison> // 比较器类型
pri_que; // 变量名
//创建小根堆
for(auto it=mp.begin();it!=mp.end();it++)
{
pri_que.push(*(it));
if(pri_que.size()>k)
{
pri_que.pop();
}
}
//统计前k个频率
vector<int> res(k);
for(int i=k-1;i>=0;i--)
{
res[i]=pri_que.top().first;
pri_que.pop();
}
return res;
}
};