Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
I'm a beginner ....any one can show me the solution of this problem...This's mine...can not pass the limit of time; Can the solution have complexity of O(logn)?import java.util.Scanner; public class Main { public static int numTest; public static int n; public static int[] a = new int[50000]; //e[i] = the maximum sum of sequence ending at i; public static long[] e = new long[50000]; //b[i] = the maximum sum of sequence starting at i; public static long[] b = new long[50000]; public static void main(String[] args) { Scanner sc = new Scanner( System.in ); numTest = sc.nextInt(); while( numTest > 0){ n = sc.nextInt(); for( int i = 0; i < n; i++) a[i] = sc.nextInt(); //optimize e[0] = a[0]; b[n-1] = a[n-1]; //i for end; //j for beginning; int j; for( int i = 1; i < n; i++){ j = n - 1 - i; e[i] = a[i]; if ( e[i - 1] > 0) e[i] = a[i] + e[i-1]; b[j] = a[j]; if( b[j + 1] > 0) b[j] = a[j] + b[j+1]; } for( int i = n - 2; i >= 0; i--){ if( b[i] < b[i + 1] ) b[i] = b[ i + 1]; } //find the maximum; long max = e[0] + b[1]; for( int i = 1; i <= n-2; i++) if( max < e[i] + b[i+1]) max = e[i] + b[i+1]; System.out.println(max); --numTest; }//end while; }//end main; }//end class; Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator