题解 | #牛舍的占地面积# java
牛舍的占地面积
https://www.nowcoder.com/practice/4d9d9bf23d874688aee6fc1ac5bf6902
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param areas int整型一维数组
* @return int整型
*/
public int maxArea (int[] areas) {
// write code here
int n = areas.length;
int[] left = new int[n];
int[] right = new int[n];
Stack<Integer> s = new Stack<>();
for (int i = 0; i < n; i++) {
while (!s.isEmpty() && areas[s.peek()] >= areas[i])
s.pop();
if (s.isEmpty())
left[i] = -1;
else
left[i] = s.peek();
s.push(i);
}
s = new Stack<>();
for (int i = n - 1; i >= 0; i--) {
while (!s.isEmpty() && areas[s.peek()] >= areas[i])
s.pop();
if (s.isEmpty())
right[i] = n;
else
right[i] = s.peek();
s.push(i);
}
int res = 0;
for (int i = 0; i < n; i++) {
res = Math.max(res, (right[i] - left[i] - 1) * areas[i]);
}
return res;
}
}
编程语言是Java。
该题考察的知识点包括:
- 使用数组和循环处理数据。
- 利用栈数据结构解决某些问题,如求最大面积。
代码的文字解释:
maxArea接收一个整型数组areas作为输入,并返回一个整型作为输出。在方法内部,首先使用栈数据结构来计算每个元素的左边界和右边界,并将结果存储在两个整型数组left和right中。
通过遍历数组areas,找到以每个元素为高度的最大矩形的面积,并在过程中不断更新最大面积值res。最后,将最大面积值res作为方法的返回值。

