程式設計之美2 14 求陣列的子陣列之和的最大值

2021-05-25 02:53:26 字數 869 閱讀 2702

問題描述:

乙個有n個整數元素的一維陣列(a[0],a[1],...a(n-1),它包含很多子陣列,求子陣列之和的最大值,當陣列元素全部為負的時候,有兩種處理辦法,第一種是返回0,第二種是返回陣列中最大的負數。

解法1:

使用暴力法,假設最大的一段陣列為a[i],...,a[j],則對i:=0~n-1 j:=i~n-1,遍歷一遍,求出最大的sum(i,j)即可

解法2:

使用分治法,陣列(a[0],a[1],...a(n-1)分為長度相等的兩段陣列(a[0],...,a[n/2])以及(a[n/2+1],...,a[n-1]),分別求出這兩段陣列各自的最大子段和,則原陣列(a[0],a[1],...a(n-1)的最大子段和分為3種情況

1)(a[0],a[1],...a(n-1)的最大子段和與(a[0],...,a[n/2])的相同

2)(a[0],a[1],...a(n-1)的最大子段和與(a[n/2+1],...,a[n-1])的相同

3)(a[0],a[1],...a(n-1)的最大子段和跨過(a[0],...,a[n/2])與(a[n/2+1],...,a[n-1])

解法3:

使用動態規劃法,假設a[0],a[1],...a(n-1)的最大子段為a[i],...,a[j],則有以下3種情況

1)當0=i=j的時候,元素a[0]本身構成和最大的一段

2)當0=i程式說明:

下面的程式中,針對陣列全部為負的情況的處理(處理1:直接返回0,處理2:返回陣列中最大的負數)定義了兩種情況,分別對應於定義了return_zero和return_maxminus這兩種情況

程式設計之美2 14 求陣列的子陣列之和的最大值

這是乙個在面試中出現概率很高的一道題目,就拿我來說吧,面試了5家公司中,兩家公司問了這道題目,可見,這道題目是非常經典的。解題思想也不是很難,我熟悉的有 兩種解題辦法 1.一直連加,終止當前序列的條件是連加的和是負數 因為,乙個數加上乙個負數之後肯定是沒有原來的數值大,所以,這肯定是沒有意義的,最終...

程式設計之美 2 14 求陣列的子陣列之和的最大值

這個以前寫過,見求陣列的最長子陣列之和的最大值 這裡說一下後面擴充套件題目。1.簡述 1 如果陣列首尾相連,即允許找到一組數字 a i a n 1 a 0 a j 請使其和最大,怎麼辦?2 如果題目要求返回最大子陣列的位置,演算法應該如何改變?還能保持o n 的複雜度麼?2.思路 第乙個問題,書上給...

程式設計之美2 14 求陣列的子陣列之和的最大值

問題描述 乙個有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.暴力解法 思路...