題意:
給你乙個正整數序列,問你在裡面找到乙個最短的子串行,要求子串行的和大於等於k,輸出序列長度。
思路:這個序列的每個數字都是正整數,那麼就比較好想了,我們可以直接列舉終點,然後每次當當前和大於等於k的時候就把前面的markid(markid初始為1)點縮排,得到前端(我的是得到前端的下乙個,這個無所謂,就是乙個加不加1的事),然後更新最小值就行了,這樣的時間複雜度是o(n)的,還有乙個o(n*logn)的方法,就是白書上說的那個,我們可以列舉終點,然後二分去找起點,因為所有數字都是正整數,所以是單調的,找到最靠後的起點作為當前終點的起點,然後更新最小值就行了。
#include
#define n 100000 + 10
int num[n];
int main ()
if(!ans || ans > i - nowid + 1)
ans = i - nowid + 1;}}
printf("%d\n" ,ans);
}return 0;
}
最短子串行 最短摘要
題目 有一段廣告,它由很多單詞構成,然後它有個摘要,即關鍵字,問包含摘要 關鍵字 的在廣告正文中的最短字串是什麼?簡而言之,就是說求在原字串中包含所有關鍵字的最短子串行。演算法思想 將每個關鍵字在原字串中位置記錄在乙個陣列中,每個關鍵字對應乙個陣列,然後令distance max a i b j c...
最短子串行和問題
有n個正整數組成乙個 序列。給定整數s,求長度最短的連續序列,使他們的最大和大於或等於s。書中給出3種思路,先上圖 a.暴力列舉起點和終點,並且依次求和。複雜度n3 b.如圖所示,a方法中曲線部分包括許多重複的區間,可以通過儲存字首來降低一些複雜度,得到n2演算法。令b i a 0 a 1 a i ...
LeetCode581 最短無序連續子串行
題目 給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。示例 1 輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序...