寻找当前元素(下标为i),最右边的大于该元素的下标,更新返回值ret=Math.max(ret,j-i-1);
import java.util.*;
public class Solution{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n=in.nextInt();
int[] nums=new int[n];
for(int i=0;i<n;i++){
nums[i]=in.nextInt();
}
Solution test=new Solution();
System.out.println(test.maxSatisfaction(nums));
}
public int maxSatisfaction(int[] nums){
int n=nums.length;
if(n==0){
return 0;
}
int[] pre=new int[n+1];
for(int i=1;i<=n;i++){
pre[i]=nums[i-1]+pre[i-1];
}
int[] max=new int[n+1];
max[n]=pre[n];
for(int i=n-1;i>=1;i--){
max[i]=Math.max(max[i+1],pre[i]);
}
int ret=0;
for(int i=0,j=1;i<=n&&j<=n;i++){
if(pre[i]>=max[j]){
continue;
}
while(j<=n&&pre[i]<max[j]){
j++;
}
ret=Math.max(ret,j-i-1);
}
return ret;
}
}