問題描述:
乙個有n個整數元素的一維陣列(a[0], a[1], a[2],...,a[n-1]),這個陣列當然有很多子陣列,那麼子陣列之和的最大值是什麼呢?
解法:1. 暴力解法-------o(n^3)
2. 改進版暴力解法-------o(n^2)
*3. 分治演算法-------o(nlogn)(暫時未去實現)
4. 陣列間關係法-------o(n)
具體思路和**:
1.暴力解法
思路:sum[i,...,j]為陣列第i個元素到第j個元素的和,遍歷所有可能的sum[i,...,j]。
**:
1int maxsum1(int a, intn)2
13if(sum >max)
14 max =sum;15}
16return
max;
17 }
2. 改進版暴力解法
思路:從上面的**我們可以發現sum[i,...,j] = sum[i,...,j-1] + a[j]
因此,最後乙個迴圈可以省去。
**:
1int maxsum2(int a, intn)2
14}15return
max;
16 }
*3. 分治演算法(待更新)
4. 陣列間關係法
(1):當i=j=0時,元素a[0]本身構成和最大的一段;
(2):當0=i
(3):當0
**:
1int maxsum3(int a, intn)2
14return
max;
15 }
程式設計之美2 14 求陣列的子陣列之和的最大值
問題描述 乙個有n個整數元素的一維陣列 a 0 a 1 a n 1 它包含很多子陣列,求子陣列之和的最大值,當陣列元素全部為負的時候,有兩種處理辦法,第一種是返回0,第二種是返回陣列中最大的負數。解法1 使用暴力法,假設最大的一段陣列為a i a j 則對i 0 n 1 j i n 1,遍歷一遍,求...
程式設計之美2 14 求陣列的子陣列之和的最大值
這是乙個在面試中出現概率很高的一道題目,就拿我來說吧,面試了5家公司中,兩家公司問了這道題目,可見,這道題目是非常經典的。解題思想也不是很難,我熟悉的有 兩種解題辦法 1.一直連加,終止當前序列的條件是連加的和是負數 因為,乙個數加上乙個負數之後肯定是沒有原來的數值大,所以,這肯定是沒有意義的,最終...
程式設計之美 2 14 求陣列的子陣列之和的最大值
這個以前寫過,見求陣列的最長子陣列之和的最大值 這裡說一下後面擴充套件題目。1.簡述 1 如果陣列首尾相連,即允許找到一組數字 a i a n 1 a 0 a j 請使其和最大,怎麼辦?2 如果題目要求返回最大子陣列的位置,演算法應該如何改變?還能保持o n 的複雜度麼?2.思路 第乙個問題,書上給...