题解 | #最大体重的牛#
最大体重的牛
https://www.nowcoder.com/practice/0333d46aec0b4711baebfeb4725cb4de
知识点
数据结构:stack,set 模拟
思路
对于题目中的要求,我们使用STL 中的栈来模拟栈,使用set来维护最大值。
对于getMAX操作,需要获取set中最后一个元素,即为最大值。
对于push操作,set和stack都要push当前元素。
对于pop操作,需要现在set中找到当前栈顶元素,并删除,然后在弹出栈顶元素
对于其余操作,基本与栈中一致。
细节
题意不够明确的是,对于第i次操作(vals中有值的都是给push),对应的vals中的值为vals[i-1][1],即体重,编号基本没有用。
此外,注意维护答案,用函数得到的值或-1依次填充vectorans.
代码c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param op string字符串vector
* @param vals int整型vector<vector<>>
* @return int整型vector
*/
vector<int> max_weight_cow(vector<string>& op, vector<vector<int> >& vals) {
// write code here
stack<int>st;
set<int>max;
vector<int>ans;
int idx=0;
for(auto v:op)
{
if(v==("MaxCowStack"))
{cout<<"max"<<endl;
ans.push_back(-1);
}
else if(v==("push"))
{
st.push(vals[idx][1]);
max.insert(vals[idx][1]);
ans.push_back(-1);
//idx++;
}
else if(v==("getMax"))
{
ans.push_back(*max.rbegin());
}
else if(v==("pop"))
{
ans.push_back(-1);
max.erase(max.find(st.top()));
st.pop();
}
else if(v==("top"))
{
ans.push_back(st.top());
}
idx++;
}
return ans;
}
};