题解 | #最大体重的牛#
最大体重的牛
https://www.nowcoder.com/practice/0333d46aec0b4711baebfeb4725cb4de
考察的知识点:MaxCowStack 类的实现、栈;
解答方法分析:
- MaxCowStack操作将栈s和maxStack清空,并将结果数组res的当前位置设置为-1。
- push操作将vals[i][1压入栈s,并更新maxStack的值。如果maxStack为空,则将vals[i][1]也压入maxStack;否则,比较maxStack的栈顶元素和vals[i][1]的大小,将较大的压入maxStack。
- pop操作将栈s和maxStack的栈顶元素出栈,并将结果数组res的当前位置设置为-1。
- top操作返回栈s的栈顶元素,并将其赋值给结果数组res的当前位置。
- getMax操作返回maxStack栈顶元素,并将其赋值给结果数组res的当前位置。
所用编程语言: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) {
stack<int> s;
stack<int> maxStack;
int n = op.size();
vector<int> res(n);
for (int i = 0; i < n; i++) {
string ops = op[i];
if (ops == "MaxCowStack") {
while (!s.empty()) s.pop();
while (!maxStack.empty()) maxStack.pop();
res[i] = -1;
} else if (ops == "push") {
s.push(vals[i][1]);
if (maxStack.empty()) {
maxStack.push(vals[i][1]);
} else {
int tmp = maxStack.top() > vals[i][1] ? maxStack.top() : vals[i][1];
maxStack.push(tmp);
}
res[i] = -1;
} else if (ops == "pop") {
s.pop();
maxStack.pop();
res[i] = -1;
} else if (ops == "top") {
res[i] = s.top();
} else if (ops == "getMax") {
res[i] = maxStack.top();
}
}
return res;
}
};

