import java.util.*; public class Main { public static void main(String[] args) throws ParseException {     Scanner sc = new Scanner(System.in);     while (sc.hasNext()) {        int N=sc.nextInt();        int []in=new int[N];        for(int i=0;i<N;i++){            in[i]=sc.nextInt();        }        System.out.println(getMax(in));     } } //得到min*sum最大的子数组 public  static int getMax(int [] nums){     if(nums==null||nums.length==0)         return 0;     int len=nums.length;     int []tmpSum=new int[len+1];     int sum=0;     for(int i=0;i<len;i++){         sum+=nums[i];         tmpSum[i+1]=sum;     }     return getCurrentMax(tmpSum,nums,0,len-1); } public static  int getCurrentMax(int []tmpSum,int []nums,int i,int j){     if(i>=j){         return nums[i]*nums[i];     }     int indexOfTmpMin=getMinFromArray(nums,i,j);     int tmpMin=nums[indexOfTmpMin];  // 当前最小值     int currentSum=tmpSum[j+1]-tmpSum[i];     return Math.max(currentSum,Math.max(getCurrentMax(tmpSum,nums,i,indexOfTmpMin-1),getCurrentMax(tmpSum,nums,indexOfTmpMin+1,j))); } public static  int getMinFromArray(int []nums,int i,int j){     int min=Integer.MAX_VALUE;     int loc=0;     for(int k=i;k<=j;k++){         if(nums[k]<min){             min=nums[k];             loc=k;         }     }     return loc; } }
点赞 1

相关推荐

04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
群星之怒:不是哥们,你就不好奇瘫痪三十年的老植物人是啥样的吗?
点赞 评论 收藏
分享
牛客网
牛客企业服务