关注
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
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛油的搬砖plog #
26202次浏览 113人参与
# 大学最后一个寒假,我想…… #
28930次浏览 273人参与
# 一人一个landing小技巧 #
23505次浏览 458人参与
# 运营每日一题 #
67566次浏览 648人参与
# 查收我的offer竞争力报告 #
176494次浏览 1065人参与
# 面试被问第一学历差时该怎么回答 #
122535次浏览 765人参与
# 电网笔面经互助 #
31601次浏览 317人参与
# 为什么那么多公司毁约 #
163425次浏览 1223人参与
# 我在牛爱网找对象 #
178350次浏览 1339人参与
# 520告白墙 #
18433次浏览 325人参与
# 找工作的破防时刻 #
25491次浏览 383人参与
# 实习学不到东西怎么办? #
203730次浏览 2113人参与
# 2023届毁约公司名单 #
190334次浏览 938人参与
# 通信硬件知识分享 #
25505次浏览 460人参与
# 实习/项目/竞赛奖项,哪个对找工作更重要? #
80289次浏览 1102人参与
# 腾讯音乐求职进展汇总 #
86239次浏览 484人参与
# 25届秋招公司红黑榜 #
259444次浏览 1089人参与
# 如果公司降薪,你会跳槽吗? #
65628次浏览 515人参与
# 我想象的实习vs现实的实习 #
277573次浏览 2207人参与
# 我发现一个规律 #
3185次浏览 31人参与