題目要求:乙個有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〗_2n。考慮陣列的第乙個元素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 解法二 思路 我們考慮陣...