今日头条后台第二题
通过了90
其实不用维持一个dp数组,只是懒得改了
public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); int[] nums = new int[N]; for (int i = 0; i < N; i++) { nums[i] = in.nextInt(); } int result = 0; int[] dp=new int[N+1]; dp[0]=0; int maxValue=0; int minTail=0;// int maxTailSum=0; int maxTailValue=0; if(nums.length>0) { dp[1] = nums[0] * nums[0]; maxValue=dp[1]; minTail=nums[0]; maxTailSum=nums[0]; maxTailValue=minTail*maxTailSum; for(int i=2;i<=N;i++){ if(minTail>nums[i-1]){ minTail=nums[i-1]; maxTailSum=0; for(int j=i-1;j>=0;j--){ if(nums[j]>=minTail){ maxTailSum+=nums[j]; }else { break; } } maxTailValue=minTail*maxTailSum; }else{ maxTailSum+=nums[i-1]; maxTailValue=minTail*maxTailSum; int temp=0; int mintemp=nums[i-1]; for(int j=i-1;j>=0;j--){ if(mintemp>=minTail){ mintemp=Math.min(mintemp,nums[j]); temp+=nums[j]; if(maxTailValue<temp*mintemp){ minTail=mintemp; maxTailSum=temp; maxTailValue=minTail*maxTailSum; } }else { break; } } } dp[i]=Math.max(Math.max(maxTailValue,maxValue),dp[i-1]); } } System.out.print(dp[N]); }