0
查找具有最大總和的數組中的連續子數組(至少包含一個 數字)。需要的最大子數組提示
例如,給定數組[-2,1,-3,4,-1,2,1,-5,4],連續的 子數組[4,-1,2,1]具有最大的總和= 6.
我無法解決這個問題,但我只是想一些提示。
它說這可以使用動態規劃解決,但我很努力地看到一個連接。
DP連接將採用整個數組的總和嗎?
查找具有最大總和的數組中的連續子數組(至少包含一個 數字)。需要的最大子數組提示
例如,給定數組[-2,1,-3,4,-1,2,1,-5,4],連續的 子數組[4,-1,2,1]具有最大的總和= 6.
我無法解決這個問題,但我只是想一些提示。
它說這可以使用動態規劃解決,但我很努力地看到一個連接。
DP連接將採用整個數組的總和嗎?
max;
max_ele;
for (i=0; i< i++) {
if (i ==0) {
max_ele = i;
max =a[i];
} else if (max < max + a[i]) {
max - max + a[i];
max_ele = i;
} else {
max = 0;
}
}
you get max_ele after this iteration, trace back till negative element or first element to get max.
您的問題的參考可以找到here。
必須使用Kadane的算法來解決這樣的情況下,它是這樣的:
Initialize:
max_so_far = 0
max_ending_here = 0
Loop for each element of the array
(a) max_ending_here = max_ending_here + a[i]
(b) if(max_ending_here < 0)
max_ending_here = 0
(c) if(max_so_far < max_ending_here)
max_so_far = max_ending_here
return max_so_far
,供大家參考示例代碼:
static int maxSubArraySum(int a[])
{
int size = a.length;
int max_so_far = Integer.MIN_VALUE, max_ending_here = 0;
for (int i = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if (max_so_far < max_ending_here)
max_so_far = max_ending_here;
if (max_ending_here < 0)
max_ending_here = 0;
}
return max_so_far;
}
HTTPS://en.m。 wikipedia.org/wiki/Maximum_subarray_problem –
可能的重複[最大總和連續子數組(面試問題)](http://stackoverflow.com/questions/5378273/largest-sum-contiguous-subarray-interview-question) – putonspectacles
這裏是一個提示爲你。假設你的數組是'A [n]'。現在構建另一個數組'B [n]',使得'B [k]'包含'A'中的連續子數組,其中最大和開始*正好*在'A [k]'處。而且,由於它在DP中是典型的,所以從末尾開始構建它 - 「B [n]」顯然只是一個元素數組「A [n]」。知道了,你能確定'B [n-1]'嗎?... – avysk