3.求子數組的最大和

題目:輸入一個整形數組,數組裏有正有負。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。求所有子數組的和的最大值。要求時間複雜度爲O(n)。

分析:由時間複雜度可見,應該是遍歷一次就能找出最大和子數組的和。分析這樣的子數組的特徵,可得:這個最大子串和的初始值一定是從正數開始的(反證法可證)。代碼如下:

int maxsum(int *array, int n, int *result) {
	int sum = 0, max = 0, i;

	if (NULL == array)
		return -1;
	for (i = 0; i < n; i++) {
		sum += array[i];
		if (sum < 0)
			sum = 0;
		else if (sum > max)
			max = sum;
	}
	*result = max;
	return 0;
}
不足:沒有考慮輸入數組都是非正數的情況。

發佈了20 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章