求最大子列和问题实现代码4
Java实现
1 import java.util.Scanner; 2 3 public class main{ 4 public static void main(String[] args) { 5 Scanner scanner = new Scanner(System.in); 6 int N=0; 7 N = scanner.nextInt()+1; 8 // N=N+1; 9 int []arr=new int[N]; 10 11 int i=0; 12 for(;i<N;i++){ 13 arr[i]=i; 14 } 15 long startTime = System.nanoTime();//开始计时 16 int Max=MaxSubseqSum4(arr,N); 17 long estimatedTime = System.nanoTime()-startTime;//结束计时,求的总时长 18 System.out.println(Max); 19 System.out.println(estimatedTime+"纳秒"); 20 } 21 22 private static int MaxSubseqSum4(int[] arr, int n) { 23 int ThisSum,MaxSum; 24 ThisSum=MaxSum=0; 25 int i = 0; 26 for(;i<n;i++){ 27 ThisSum = arr[i]+ThisSum;/*向右累加*/ 28 if(ThisSum >= MaxSum)/*发现更大和则更新当前结果*/ 29 MaxSum = ThisSum;/*如果当前子列和为负*/ 30 else 31 ThisSum=0;/*则不可能使后面的部分和增大,抛弃之*/ 32 33 } 34 return MaxSum; 35 } 36 37 }
import java.util.Scanner;
public class main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N=0;
N = scanner.nextInt()+1;
// N=N+1;
int []arr=new int[N];
int i=0;
for(;i<N;i++){
arr[i]=i;
}
long startTime = System.nanoTime();//开始计时
int Max=MaxSubseqSum4(arr,N);
long estimatedTime = System.nanoTime()-startTime;//结束计时,求的总时长
System.out.println(Max);
System.out.println(estimatedTime+"纳秒");
}
private static int MaxSubseqSum4(int[] arr, int n) {
int ThisSum,MaxSum;
ThisSum=MaxSum=0;
int i = 0;
for(;i<n;i++){
ThisSum = arr[i]+ThisSum;/*向右累加*/
if(ThisSum >= MaxSum)/*发现更大和则更新当前结果*/
MaxSum = ThisSum;/*如果当前子列和为负*/
else
ThisSum=0;/*则不可能使后面的部分和增大,抛弃之*/
}
return MaxSum;
}
}