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 的整型数组 leftright,以及一个栈 stack,用于辅助计算。

利用栈来预处理每个位置的左侧和右侧最近比其大的位置,并将结果存储在数组 leftright 中。

使用循环来计算每个位置的最大面积,并将最大值存储在变量 maxArea 中。

将变量 maxArea 作为结果返回。