Java 题解 | #最大体重的牛#
最大体重的牛
https://www.nowcoder.com/practice/0333d46aec0b4711baebfeb4725cb4de
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param op string字符串一维数组 * @param vals int整型二维数组 * @return int整型一维数组 */ public int[] max_weight_cow (String[] op, int[][] vals) { // write code here int[] res = new int[op.length]; Stack<Integer> s = new Stack<>(); int[] v = new int[op.length]; int size = 0; for (int i = 0; i < op.length; i++) { if (op[i].equals("push")) { s.push(vals[i][1]); v[size] = vals[i][1]; size++; Arrays.sort(v, 0, size); res[i] = -1; } else if (op[i].equals("pop")) { int idx = 0; for (int j = 0; j < size; j++) { if (v[j] == s.peek()) { idx = j; break; } } System.arraycopy(v, idx + 1, v, idx, size - idx - 1); size--; s.pop(); res[i] = -1; } else if (op[i].equals("getMax")) { res[i] = v[size - 1]; } else if (op[i].equals("top")) { res[i] = s.peek(); } else { res[i] = -1; } } return res; } }
这段代码使用的编程语言是Java。
主要考察的知识点包括:
- 数组和列表的使用:使用数组和列表存储操作和数值。
- 栈的实现和操作:使用栈来模拟压栈和弹栈操作。
- 排序算法的应用:使用排序算法对列表进行排序,以获取最大值。
- 条件语句和循环语句的运用:根据不同的操作类型执行相应的操作。
- 数组的复制和移动:使用 System.arraycopy 方法来移动数组元素。
代码的文字解释大纲如下:
- 定义一个 Solution 类,其中包含一个 max_weight_cow 方法,用于执行一系列操作并返回结果数组。
- 在方法中,创建一个栈对象和大小相同的数组来存储元素值。
- 遍历操作数组,根据不同的操作类型执行相应的操作。如果是 "push" 操作:将值压入栈对象和数组末尾。增加数组大小,将数组排序,设置结果为 -1。如果是 "pop" 操作:找到栈顶元素在数组中的索引。使用 System.arraycopy 方法将栈顶元素之后的元素左移一位。减小数组大小,弹出栈顶元素,设置结果为 -1。如果是 "getMax" 操作:将数组的最后一个元素设置为结果。如果是 "top" 操作:将栈顶元素设置为结果。其他情况下,将结果设置为 -1。
- 返回结果数组。