切割点
题目描述
给定一个整数数组 arr[],请设计一个算法找出一个分割点 i,使得以下两个条件同时成立:
数组从 arr[0] 到 arr[i] 的最大值大于等于数组从 arr[i+1] 到 arr[n-1] 的最大值。
该分割点 i 分割后的两个区间,使得前面区间和后面区间的长度差最小。如果存在这样的分割点,请输出该分割点 i;如果不存在,输出 -1。
输入格式
一个整数数组 arr[],其中 1 ≤ n ≤ 10^5。
输出格式
输出符合条件的分割点 i。如果没有符合条件的分割点,输出 -1。
示例
输入样例 1:
6
5 3 8 6 2 7
输出样例 1:
2
在分割点 i = 2 时,前缀区间 [arr[0...2]] = [5, 3, 8] 的最大值为 8,后缀区间 [arr[3...5]] = [6, 2, 7] 的最大值为 7,满足条件 。 此时,前缀区间和后缀区间的长度差为 3-3=0。
数据范围
1≤n≤10^5
数组中的每个元素的绝对值 ∣a i∣≤10^6