1. 最大連續子串行
問題及分析: 給定乙個陣列a[n],求a的連續字陣列中,使得該子陣列的和最大,並給出和的值。
方法1: 暴力法,三重迴圈, 時間複雜度o(n^3)
方法2:分治法,可達到o(n*logn) 還不夠好。。。
下面兩種方法均可達到o(n)
o(n)方法 1 分析法:
思路:一次遍歷求出i的字首和sum[i],
記錄每個i對應的min[i](即sum[0,1 2 ....i-1]中最小的乙個)
submax[i] = sum[i] - min[i]可求得以每個a[i]結尾的最大子陣列的值
比較submax[i] 可求得最大值max
注意此時最大值未考慮每個sum[i], 遍歷一遍比較得到真正最大子陣列值
總結:字首和思路很多時候用的上,要考慮到,開拓思路; 注意不要忘記比較sum[i]
pat
ac **
#include#includeusing namespace std;
int main()
sum[0] = a[0];
submax[0] = a[0];
m[0] = 100000000;
m[1] = sum[0];
max = a[0];
for(int i = 1; i < n;i++)
} for(int i = 0; i < n; i++)
} printf("%d",max);
return 0;
}
o(n) 方法2 :
動態規劃
思路:submax[i] = max(submax[i-1], a[i)) 求最優子問題(以a[i]結尾的最大子陣列和)
動態規劃典型問題
ac **
#includeint main()
submax[0] = a[0];
max = a[0];
for(int i = 1; i < n; i++)
else
if (submax[i] > max)
} printf("%d",max);
return 0;
}
若干常用(內部)排序演算法的總結
實現 中會出現巨集 typedef int datatype define swap a,b 1.插入排序演算法 類似數學歸納法的描述 起始時a beg 的元素位置不變 此時a beg 這乙個元素已經有序 假設a beg a i beg i end 1 已經排好序,對a i 1 a end 依次將a...
貪心演算法總結及例項簡介
基本思想 1.求解最優化問題的演算法包含一系列步驟。2.每一步都有一組選擇。3.作出當前看來最好的選擇。4.希望通過作出區域性優化選擇達到全域性優化選擇。5.貪心演算法不一定總產生優化解。6.貪心演算法是否產生優化解需嚴格證明。貪心演算法產生優化解的條件 1.貪心選擇性 若乙個優化問題的全域性優化解...
若干排序演算法簡單彙總 一
從題目看,首先不是全部是若干。排序演算法很多,我個人的能力也有限,不可能都講到。另外,是簡單彙總,是希望能用最簡單的 最簡短的語言說明問題,不搞太多理論分析。就像前面說的,排序演算法有很多,而且不存在哪一種最不好,哪一種最好這樣的說法。根據用途不同選擇最適合的就行了。不過僅從時間複雜度來看,基本上有...