import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param op string字符串一维数组
* @param vals int整型二维数组
* @return int整型一维数组
*/
Stack<Integer> s;
Stack<Integer> maxs;
public int[] max_weight_cow (String[] op, int[][] vals) {
// write code here
int[] res = new int[op.length];
s = new Stack<>();
maxs = new Stack<>();
for (int i = 0; i < op.length; i++) {
if (op[i].equals("MaxCowStack")) {
res[i] = -1;
} else if (op[i].equals("push")) {
s.push(vals[i][1]);
if (maxs.isEmpty() || vals[i][1] > maxs.peek()) {
maxs.push(vals[i][1]);
}
res[i] = -1;
} else if (op[i].equals("pop")) {
int val = s.pop();
if (maxs.peek() == val) {
maxs.pop();
}
res[i] = -1;
} else if (op[i].equals("top")) {
res[i] = s.peek();
} else if (op[i].equals("getMax")) {
res[i] = maxs.peek();
}
}
return res;
}
}
该代码使用的编程语言是Java。
这道题考察的是栈的基本操作和使用。
代码的详细文字解释如下:
- 首先定义了一个 Solution 类,其中包含两个栈 s 和 maxs,分别用于保存数据和保存当前栈中的最大值。
- max_weight_cow 方法是解决问题的入口函数。它接收两个参数,一个是字符串类型的操作序列 op,另一个是整型二维向量 vals,表示对应操作的值。方法返回一个整型向量 res,用于保存每个操作的结果。
- 在方法内部,首先创建一个大小为 op.size() 的整型向量 res,用于保存每个操作的结果。
- 然后,通过遍历操作序列 op,对每个操作进行处理。
- 如果操作是 "MaxCowStack",则将结果向量 res 中对应位置的元素置为 -1,表示无需返回结果。
- 如果操作是 "push",则将 vals 中对应位置的值压入栈 s 中,并判断栈 maxs 是否为空,或者新的值是否比栈顶元素大。如果是,则将新的值压入栈 maxs 中。
- 如果操作是 "pop",则从栈 s 中弹出一个值,并判断该值是否与栈 maxs 的栈顶元素相等。如果是,则也将栈 maxs 的栈顶元素弹出。
- 如果操作是 "top",则将栈 s 的栈顶元素赋值给结果向量 res 中对应位置的元素。
- 如果操作是 "getMax",则将栈 maxs 的栈顶元素赋值给结果向量 res 中对应位置的元素。
- 最后,返回结果向量 res。
通过使用两个栈,一个用于保存数据,一个用于保存当前栈中的最大值,实现了在常数时间内获取栈中的最大值。

京公网安备 11010502036488号