使用单调栈来找到每个元素左右第一个比其大的元素索引。左侧数组 left 记录每个元素左边第一个大于它的元素索引,右侧数组 right 记录每个元素右边第一个大于它的元素索引。遍历每个元素,计算以该元素为唯一最大值的独占子段数量,公式为 left_count * right_count,其中 left_count 是当前元素到左边界的距离,right_count 是当前元素到右边界的距离。最终汇总所有独占子段数量。
import java.util.Stack;
给定一个长度为 n 的整数序列 A=[A1,A2,…,An]。对于任意一个连续子段,若该子段中的最大值是唯一的(即不存在另一个元素与最大值相等),则称该子段为一个 独占子段。请你计算序列 A 中独占子段的总数。
序列长度 n 满足 1≤n≤ 10^5,每个元素 Ai 满足 1≤Ai≤ 10^9。
第一行输入一个整数 n (1≤n≤ 10^5),表示序列的长度。
第二行输入 n 个整数 A1,A2,…,An (1≤Ai≤ 10^9),表示序列中的元素。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册