最大子序列和问题的算法的改进及复杂度分析

最大子序列和的问题

算法1 O(N^3)

(本算法并不计算实际的子序列,实际的计算还要添加一些额外的代码,这里只研究复杂度)

复制代码
复制代码
 1     public static int maxSubSum1(int[] a){//O(N^3)
 2         int maxSum = 0;
 3 
 4         for (int i = 0; i < a.length; i++) {
 5             for (int j = 0; j < a.length; j++) {
 6                 int thisSum = 0;//O(1)
 7 
 8                 for (int k = i; k <= j; k++) {
 9                     thisSum += a[k];
10                 }
11                 if (thisSum > maxSum){  //O(N^2)
12                     maxSum = thisSum; 
13                 }
14 
15             }
16         }
17         return maxSum;
18     }
复制代码
复制代码

我们可以通过撤除一个for循环来避免三次的运行时间

算法二:复杂度O(N^2)

 

复制代码
    public static int maxSubSum1(int[] a) {//O(N^2)
        int maxSum = 0;

        for (int i = 0; i < a.length; i++) {
            int thisSum = 0;//O(1)
            for (int j = 0; j < a.length; j++) {

                thisSum += a[j];

                if (thisSum > maxSum) {  //O(N)
                    maxSum = thisSum;
                }
            }
        }
        return maxSum;
    }
复制代码

算法1中第8/9行上的计算过分地耗费了。

posted @   Fancy[love]  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示