最大子串行和問題

2021-08-28 08:17:57 字數 842 閱讀 5220

輸入一組整數,求出這組數字子串行和中最大值。也就是只要求出最大子串行的和,不必求出最大的那個序列。例如:{4,-3,5,-2,6,-7,1}的最大子串行和是10。

演算法1,

//窮舉法,時間複雜度o(n^3)

int maxsub(int data)

}return maxsum;

}

演算法3

採用分治演算法思想,時間複雜度o(nlogn);

最大序列只可能出現在序列的左邊,右邊或者跨越左右兩邊,用遞迴的方法可以解決問題。

int max(int a,int b,int c)

if (max =first;i--)

}rmaxsum = data[middle+1];

for (int j = middle+1;j<=last;j++)

}int num = max(rdata,ldata,rmaxsum + lmaxsum);

return num;

}

演算法4

下面介紹乙個線性的演算法,這個演算法是許多聰明演算法的典型,時間複雜度為o(n)。

主要思想:如果a[i]是負數那麼它不可能代表最大序列的起點,因為任何包含a[i]的作為起點的子串行都可以通過用a[i+1]作為起點來改進。類似的有,任何的負的子串行不可能是最優子串行的字首。

long maxsubsum4(int a,int len)

}return maxsum;

}

遍歷到a[i]時,如果a[i]前面的子串行和小於零,則將maxhere置為a[i],因為負的子串行和不會優化得到最大子串行。

最大子串行和問題

問題 給定一整數序列a1,a2,an 可能有負數 求a1 an的乙個子串行ai aj,使得ai到aj的和最大 例如 整數序列 2,11,4,13,5,2,5,3,12,9的最大子串行的和為21。對於這個問題,最簡單也是最容易想到的那就是窮舉所有子串行的方法。利用三重迴圈,依次求出所有子串行的和然後取...

最大子串行和問題

問題描述 給定乙個整數序列 可能有負數 求一子串行 記為l 使得該子串行所有元素之和最大。例 給定序列 2,11,4,13,5,2,則最大子串行和為20 11,4,13 方法一 遍歷窮舉 o n 2 略方法二 分治遞迴 o n logn 思路 將輸入序列l分為左右兩個子串行l1和l2,則l 只可能以...

最大子串行和問題

問題描述 求 2,11,4,13,5,2 的最大子串行和。方法一 使用3層for迴圈巢狀,窮舉式的嘗試所有的可能,如下 public class demo1 return maxsum public static void main string args system.out.println 最大...