通过一个动态规划的例子来体会时间复杂度的不同

匿名 (未验证) 提交于 2019-12-03 00:11:01
public class Main {     public static void main(String[] args) {     // write your code here         int N = 10000;         int[] A = new int[N];         for(int i = 0; i < N; i++){             A[i] = (int)(Math.random() * N + 1);         }         long startTime=System.nanoTime();         int res = MaxSubsequenceSum_4(A, N);         long endTime=System.nanoTime();         System.out.println(res);         System.out.println("程序运行时间: "+(endTime - startTime)+"ns");      }      //Algorithm 1      O(N^3)     public static int MaxSubsequenceSum_1(final int A[], int N){         int ThisSum, MaxSum = 0;         for(int i = 0; i < N; i++){             for(int j = i; j < N; j++){                 ThisSum = 0;                 for(int k = i; k <= j; k++){                     ThisSum += A[k];                 }                 if(ThisSum > MaxSum){                     MaxSum = ThisSum;                 }             }         }         return MaxSum;     } //    Algorithm2       O(N^2)     public static int MaxSubsequenceSum_2(final int A[], int N){         int ThisSum, MaxSum = 0;         for(int i = 0; i < N; i++){             for(int j = i; j < N; j++){                 ThisSum = A[j];                 if(ThisSum > MaxSum){                     MaxSum = ThisSum;                 }             }         }         return MaxSum;     } //Algorithm4            O(N)     public static int MaxSubsequenceSum_4(final int A[], int N){         int ThisSum = 0, MaxSum = 0;         for(int j = 0; j < N; j++){             ThisSum += A[j];             if(ThisSum > MaxSum){                 MaxSum = ThisSum;             }             else if(ThisSum < 0){                 ThisSum = 0;             }         }         return MaxSum;     } }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!