小塔有一个长度为n的数组{a1,a2,...,an},如果一个数组有一个唯一的最大值,那么这个数组就是一个好数组。
使用单调栈来找到每个元素左右第一个比其大的元素索引。左侧数组 left 记录每个元素左边第一个大于它的元素索引,右侧数组 right 记录每个元素右边第一个大于它的元素索引。遍历每个元素,计算以该元素为唯一最大值的子数组数量,公式为 left_count * right_count,其中 left_count 是当前元素到左边界的距离,right_count 是当前元素到右边界的距离。最终汇总所有子数组数量。
import java.util.Stack;