代码随想录day11
150逆兰式求表达式的值
注意
1.stoll可以把字符串转化成long int,long long int
2.取出两个数字都要弹出,注意顺序["4", "13", "5", "/", "+"],(4 + (13 / 5)) = 6
5 13 4| m=5,n=13,n/m
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 m=st.top();
st.pop();
long long n=st.top();
st.pop();
if(tokens[i]=="+") st.push(m+n);
if(tokens[i]=="-") st.push(n-m);
if(tokens[i]=="*") st.push(m*n);
if(tokens[i]=="/") st.push(n/m);}
else{
st.push(stoll(tokens[i]));
}}
long long res=st.top();
return res;
}
};
-
239. 滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
1.自己定义一个类去实现一个队列,采用deque
2.定义vector去记录结果
class Solution {
public:
class myqueue{
public:
deque<int> que;//采用deque做队列底层的数据结构
//弹出,当队列不是空的时候,如果要弹出的数是队列前面的数
void pop(int value){
if(!que.empty()&&value==que.front())
que.pop_front();
}
//和最后的元素进行比较,如果大于一直弹出,小于的话直接加入队伍尾部
//将value加入到对尾部,确保最大值在队列前面
void push(int value){
while (!que.empty()&&value>que.back()){
que.pop_back();
}
que.push_back(value);
}
int front(){
return que.front();
}
};
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
myqueue que;
vector<int> res;
//将K个元素加入到队列里面
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;
}
};
原文地址:https://blog.csdn.net/weixin_57491824/article/details/145230917
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!