中国大学MOOC-陈越、何钦铭-数据结构-2020春---实现代码

求最大子列和问题实现代码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;
}

}

猜你喜欢

转载自www.cnblogs.com/sunshuaiqun/p/12926654.html