一个显然的思路是枚举断点,然后分别计算前缀和后缀的极差,相减取绝对值。这些答案里取最小即可。
由于n 比较大,我们需要提前算出前缀每个位置的极差,以及后缀每个位置的极差。
f1[i] 表示前i 个位置的极差,f2[i] 表示后i 个位置的极差。
f1[i] = max(max[i-1], a[i]) - min(min[i-1], a[i])
小蓝有一个长度为 n 的序列 a1,a2,…,an,他希望在这个序列中选择一个分割点,将序列划分为左右两个非空的连续子段。定义一个子段的跨度为该子段内元素的最大值与最小值之差。小蓝想要找一种划分方式,使得左子段跨度与右子段跨度的差的绝对值尽可能小。请你计算出这个最小的绝对差值。
约束:序列长度 n 满足 2≤n≤105;序列中的每个元素 ai 满足 1≤ai≤109。所有输入数据均为整数。
第一行包含一个整数 n(2≤n≤105),表示序列的长度。 第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109),表示序列中的元素。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册