給定乙個有n(n≥1)個整數的序列,要求求出其中最大連續子串行的和。
例如:序列(-2,11,-4,13,-5,-2)的最大子串行和為20
序列(-6,2,4,-7,5,3,2,-1,6,-9,10,-2)的最大子串行和為16。
規定乙個序列最大連續子串行和至少是0(看成0個元素構成的子串行),如果小於0,其結果為0。
設含有n個整數的序列a[0…n-1],其中任何連續子串行a[i…j](i≤j,0≤i≤n-1,i≤j≤n-1)求出它的所有元素之和thissum。
通過比較將最大值存放在maxsum中,最後返回maxsum。
int
maxsubsum1
(int a,
int n)
}return maxsum;
}
改進前面的解法,在求兩個相鄰子串行和時,它們之間是關聯的。
例如a[0…3]子串行和=a[0]+a[1]+a[2]+a[3],a[0…4]子串行和=a[0]+a[1]+a[2]+a[3]+a[4],在前者計算出來後,求後者時只需在前者基礎上加以a[4]即可,沒有必須每次都重複計算。從而提高了演算法效率。
int
maxsubsum2
(int a,
int n)
}return maxsum;
}
更一步改進解法2。
如果掃瞄中遇到負數,當前子串行和thissum將會減小,若thissum為負數,表明前面已經掃瞄的那個子串行可以拋棄了,則放棄這個子串行,重新開始下乙個子串行的分析,並置thissum為0。
若這個子串行和thissum不斷增加,那麼最大子串行和maxsum也不斷增加。
int
maxsubsum3
(int a,
int n)
return maxsum;
}
蠻力法 求解最大連續子串行和問題
題目 給定乙個有n n 1 個整數的序列,求解其中最大連續子串行的和。規定乙個序列的最大子串行和至少為0,若結果小於0,則其結果為0 例 序列 2,11,4,13,5,2 的最大子串行和為20 序列 6,2,4,7,5,3,2,1,6,9,10,2 的最大子串行和為16。思路一 窮舉法 設含有n個整...
求解最大連續子串行和問題
解法1 maxsubsum1 a,n 演算法中用三重迴圈來窮舉所有的連續子串行,計算它們的和,時間複雜度為t n o n 3 1 long maxsubsum1 int a,intn 2 14if thissum maxsum maxsum thissum 15 16 17return maxsum...
最大連續子串行和 問題
為了證書,重新開始刷資料結構,原本也就是學的一知半解的,上來就給我來了乙個最大子串行和問題,搞得我很無奈,貌似hdu1003就是這個問題.第一 重新定義乙個新的sum陣列,然後進行儲存連續子串行的和,遇到前面的加和sum i 1 小於0,就直接讓sum i a i include include i...