我正在研究最大的子數組問題。看來我沒有得到核心思想。假設你有以下數組:int arr[] ={10, 4, 2, 12, 16, 1}
根據我所理解的最大子數組應該等於14,因爲最低和最高可能的子數組是2(第三個元素)和16(第五個元素)對嗎?那麼,顯然不是。我實現了線性時間算法,我發現這裏:http://heliang.me/wiki/index.php?title=4.1_The_maximum-subarray_problem 它的實現在C++中」Maximum subarray_problem understanding
int max_sarr(int arr[], int size)
{
int max_sum = -9999;
int sum = 0;
for(int i = 0; i < size; i++)
{
sum += arr[i];
if(sum > max_sum)
max_sum = sum;
if(sum < 0)
sum = 0;
}
return sum;
}
int main()
{
int arr[] = {10, 4, 2, 12, 16, 1};
int p = max_sarr(arr, 6);
cout << p << endl;
return 0;
}
輸出是45所以...這裏是我的思維過程的錯誤
最大的子陣列只是一個最大可能總和的子陣列,就這麼簡單。 – 2013-04-21 13:18:59
你的理解是最錯誤和奇怪的。該算法是正確的。很難找到你的錯誤,因爲你沒有展示任何思維過程。 – 2013-04-21 13:25:37