其中maxEndingHere和maxSofar的使用是精华,这个算法能在O(n)时间内解决问题!!!,而一般程序员写出来的代码只能在O(n exp 2)解决问题,具体算法原理过几天再发。这个算法时从编程珠玑中看到的,让我再次领悟到好的算法对性能提高时多么地大~
- /*
- 从一个整形数组中找到最大字串的和
- */
- #include <iostream>
- using namespace std;
- int find_max_sub(int *,int);
- int main()
- {
- int test[] = {1,2,3,-15,5,0};
- cout<<find_max_sub(test, 6)<<endl;
- }
- int find_max_sub(int *array, int length)
- {
- int maxSofar = 0;
- int maxEndingHere = 0;
- for(int i = 0; i < length; i++)
- {
- maxEndingHere = max(maxEndingHere+array[i], 0);
- maxSofar = max(maxSofar, maxEndingHere);
- }
- return maxSofar;
- }