給你你一串?dāng)?shù)(50,000)個(gè),讓你從這一大串?dāng)?shù)中找出連續(xù)的兩串?dāng)?shù),使得其和最大。
思路:首先,三十組測(cè)試數(shù)據(jù),每組規(guī)模50,000,時(shí)間復(fù)雜度肯定不能是O(n^2)了
設(shè):以第i個(gè)數(shù)為結(jié)尾的串可能的最大的連續(xù)子串為a[i];后j個(gè)數(shù)中能選出的最大的連續(xù)子串為b[j];
對(duì)于a數(shù)組的遞推關(guān)系(b數(shù)組同理):
遞推關(guān)系:a[i]=max(v[i],a[i-1]+v[i]);邊界條件:a[1]=v[1];實(shí)現(xiàn)過(guò)程:1.首先一次dp存到a數(shù)組,然后給v數(shù)組倒置,再一次dp存到b數(shù)組。
2.現(xiàn)在就是要找到a[i]+b[j](i+j<=n)的最大值了,但是暴力O(n^2)又超時(shí)了,所以還是空間換時(shí)間。aa[i]表示a[1]-a[i]之間的最大值,bb[i]表示b[1]-b[i]之間的最大值,然后找到max{aa[i]+bb[n-i]}(1<=i<=n)即為結(jié)果;三個(gè)操作都是O(n);
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注