求最大子陣列之和

2021-07-16 12:24:17 字數 1462 閱讀 7563

在乙個有n個元素的陣列中,其中每個元素的值可正可負,在該陣列中求乙個連續子陣列,使得該陣列的和最大

拿到這個題首先想到的是暴力法,即暴力迴圈求所有陣列的和,因此可以求的該陣列的最大值,其時間複雜度為o(n^3)

時間複雜度較高,我們可以用分治法動態規劃來做這道題。其中分治法時間複雜度為o(n*logn),而動態規劃為o(n)。

暴力法:

private

static

void f1(int array)

if (array.length == 1)

int max = array[0];//最大值

int start = 0; //陣列的起始下標

int end = 0; //陣列的終止下標

for (int i = 0; i < array.length; i++)

if (sum > max) }}

for (int i = start; i <= end; i++)

system.out.println("\n" + max);

}

分治法

private

static

int f2(int array, int start, int end)

int mid = (start + end) / 2;

int m1 = f2(array, start, mid); // 最大值在前一半

int m2 = f2(array, mid + 1, end); // 最大值在後一半

int mf = array[mid];

intsum = 0;

for (int i = mid; i >= start; i--)

}int mb = array[mid + 1];

sum = 0;

for (int i = mid + 1; i <= end; i++)

}int m3 = mf + mb;

int res = 0;

if (m1 > m2) else

if (res < m3)

return res;

}

動態規劃:

// s[k+1] = max ( s[k]+a[k+1], a[k+1] ) 要麼繼續連續,要麼斷開

private

static

int f3(int array, int start, int end) else

if (sum > max)

}return max;

}

如何求最大子陣列之和

問題概述 有乙個長度為n的陣列,這n個元素可以使正數也可以是負數,陣列中連續的乙個或多個元素可以組成乙個連續的子陣列,乙個陣列可以有多個這樣連續的子陣列,求子陣列各個元素和的最大值。找出所有子陣列元素,進行求和,然後找到和的最大值 public static int findsecond int a...

求最大子串行之和

摘要 給出乙個序列,求出其中連續的子串行中和最大的乙個。如 1 3 5 2 1 4 5 最大子串行之和是2 1 4 5 基本思路 最簡單的辦法就是遍歷一邊序列,用變數thissum記錄遍歷過的元素之和,當thisum 0時,繼續相加.若thisum 0,令thisum 0,吧下乙個元素作為新的子串行...

求最大子串行之和

今天一下午在看sharepoint了,又有活幹,所以時間比較緊湊,於是想起了前些日子寫的求最大子串行之和,作為每日一小題吧,暫做自我安慰吧。求最大子串行之和,主要要注意他的效率,1,演算法複雜度是o pow n,2 int max sub int a,int size return max 2,演算...