求陣列的子陣列之和的最大值(程式設計之美)

2021-08-01 15:09:37 字數 983 閱讀 8060

題目要求:乙個有n個整數元素的一維陣列(a[0],a[1],···,a[n-2]、a[n-1]),這個陣列當然有很多子陣列,那麼子陣列中和最大值是多少呢?

1、子陣列是連續的

2、求子陣列的和,不用求子陣列的具體位置

3、陣列的元素時整數,所以陣列可能包含有正整數、零、負整數

解法一:暴力解法,從陣列的第0位開始遍歷陣列查詢出sum[i,…,j]表示陣列從第i位到底j位的和。

/*

* 求陣列的子陣列之和的最大值

*/public

static

int maxsum(int nums)

// if(sum > max)

//每次計算完一次sum[i,...,j]的和之後,都需要將sum清零

// sum = 0;

// }

// }

//給出乙個簡單的優化,使得演算法的時間複雜度為n的二次冪

for(int i = 0; i < n; i++)

//每次計算完一次sum[i,...,j]的和之後,都需要將sum清零

sum = 0;

}return max;

}

解法二:採用分治的思想,將時間複雜度降到〖n*log〗_2⁡n。考慮陣列的第乙個元素a[0],以及最大的一段陣列(a[i],….,a[j])跟a[0]之間的關係:

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

2、當0=i

public static int maxsum_2(int nums)

return

all;

}public static int maxsum_1(int nums)

return

all[0];

}public static int

max(int x,int y)

求陣列的子陣列之和最大值

題目 乙個有n個整數元素的一維陣列a 0.n 1 這個陣列當然有很多子陣列,那麼子陣列之和最大值是多少?解答 求子陣列之和最大,這裡是連續的子陣列,如果乙個數為負數,陣列之和會減少,記住最大值,只要陣列之和沒有小於0就可以繼續累加,比如,3到 1子陣列之和減小了,但是沒有小於0,可以繼續累加下乙個數...

求陣列的子陣列之和的最大值

本題的要求顯然是o n 級的複雜度咯 結合書上的分析,可以發現如下條件 從陣列右邊像左遍歷,當前下標為i,那麼最大值有3中情形 1.最大值為array i 2.最大值為array i maxsuminclude 3.最大值為不包括array i 的maxsumexclude 最後返回最大值 max ...

求陣列的子陣列之和的最大值

乙個有n個整數元素的一維陣列 a 0 a 1 a n 2 a n 1 這個陣列當然有很多子陣列,那麼子陣列之和的最大值是什麼呢?下面將給出3種解法的 解法一 int max maxsum1 int a,int n return maxnum 分析 該演算法的複雜度為o n2 解法二 思路 我們考慮陣...