import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param areas int整型一维数组
* @return int整型
*/
public int maxArea (int[] areas) {
// write code here
// 预处理两边最近的比其大的位置
int n = areas.length;
int[] l = new int[n];
int[] r = new int[n];
Stack<Integer> stk = new Stack<>();
for (int i = 0; i < n; i++) {
while (!stk.isEmpty() && areas[stk.peek()] >= areas[i]) {
stk.pop();
}
if (stk.isEmpty()) {
l[i] = -1;
} else {
l[i] = stk.peek();
}
stk.push(i);
}
stk = new Stack<>();
for (int i = n - 1; i >= 0; i--) {
while (!stk.isEmpty() && areas[stk.peek()] >= areas[i]) {
stk.pop();
}
if (stk.isEmpty()) {
r[i] = n;
} else {
r[i] = stk.peek();
}
stk.push(i);
}
int res = 0;
for (int i = 0; i < n; i++) {
res = Math.max(res, (r[i] - l[i] - 1) * areas[i]);
}
return res;
}
}
代码使用的编程语言是Java。
该题考察的知识点是利用栈(Stack)数据结构和数组进行区间计算。
maxArea方法用于计算给定整型数组 areas 中的最大面积。首先,创建了两个大小为 n 的整型数组 left 和 right,以及一个栈 stack,用于辅助计算。
利用栈来预处理每个位置的左侧和右侧最近比其大的位置,并将结果存储在数组 left 和 right 中。
使用循环来计算每个位置的最大面积,并将最大值存储在变量 maxArea 中。
将变量 maxArea 作为结果返回。

京公网安备 11010502036488号