在學習動態規劃時,看到了這個求連續子串行的最大和問題,在看了些部落格之後,發現一般都是按題目要求,只是輸出了最大的和,於是我想著怎麼把子序列也輸出來。
首先講講單純輸出最大和的時候吧。見核心部分**:
cur_sum += num;
if(max < cur_sum )
if (cur_sum < 0)
這是我在別的博主那裡摘來的(不是複製,所以有點不一樣,但是意思差不多),這段**不考慮全部是負數的情況,因為意義不大。當cur_sum小於0時,cur_sum = 0
,因為這就相當於 ,把前面那一段資料看成乙個整體,這個整體的和為負數,而加上乙個負數一定會減小資料的,所以應當捨棄前面那個整體,並將cur_sum = 0。
對於輸出子串行和:
我想到的是定義乙個變數lock,用這個標誌來判斷是否應當更新序列的起始位置。
當有了新的 max 值 同時 經過了乙個了一次cur_sum < 0時,那麼l就要更新序列的起始位置了,同時要把lock變數取反。
lock = 0;
if(max < cur_sum )
temp_e = i;
}if (cur_sum < 0)
final : 完整**
#include #include #include #include int main(int argc, char const *argv)
temp_e = i;
} if (cur_sum < 0)
} printf("\n%d %d|max = %d\n",temp_l,temp_e,max );
return 0;
}
和最大的連續子串行
maximum subarray sum 2016京東校園招聘數字營銷崗的筆試題 問題描述 乙個一維陣列同時包含有正整數和負整數,找到陣列裡和最大的連續子串行 如 給定陣列,最大和是7,像merge sort 一樣用遞迴的方法實現,具體可參考這裡 時間複雜度o nlog n 這個方法就是方法1的核心...
最大連續子串行的和
問題描述 輸入一組整數,求出這組數字子串行和中最大值。也就是只要求出最大子串行的和,不必求出最大的那個序列。例如 序列 2 11 4 13 5 2,則最大子串行和為20。序列 6 2 4 7 5 3 2 1 6 9 10 2,則最大子串行和為16。演算法一 窮舉法,複雜度o n 3 最容易想到也是最...
最大連續子串行的和
暴力列舉法 o n 3 級複雜度,可以求出最大連續子串行的範圍 直接兩個for迴圈枚舉子序列的首尾,然後再來個迴圈計算序列的和,每次更新和的最大值。include using namespace std define n 100005 define inf 0x3f3f3f3f int num n ...