题解 | #最大体重的牛#
最大体重的牛
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; } };