題目:給定長度為n的整數數列:a0,a1,..,an-1,以及整數s。這個數列會有連續的子串行的整數總和大於s的,求這些數列中,最小的長度。
如果數列中有正有負,則直接用 o(n^2)的演算法。
現在討論 數列中全為非負數的情況:
令i, j 都指向 數列的第乙個元素,之後迴圈執行以下步驟:
1. j++ 直到 a[i] + .... + a[j] > s;
2. i++ 直到 a[i] + ..... + a[j] <= s, 同時更新最小長度。(這裡注意i <= j)
之所以可以這麼做的理論證明是:
1.如果 a[i] + .... + a[j] > s, 那麼顯然不用再列舉 a[i] + .... + a[j+1] 的情況,也同樣不用列舉a[i-1] + ..... + a[j] 的情況。而只需要列舉a[i+1] + ...... + a[j]的情況(因此可以「後縮」)。
2.如果 a[i] + .... + a[j] <= s, 那麼 a[i+1] + .... + a[j] 顯然也是 <= s的,不滿足情況,所以也無需列舉。(因此需要「前伸」)。
**如下:
#include
using namespace std;
int main()
int n = i - 1;
int sum = 0;
int min = n;
for (i = 0, j = 0; i < n && j < n; )
while (sum > s && i < n && i <= j)
}cout << min << endl;
return 0;
}
ios 基礎面試題前10道
1 import與 include的區別,class代表什麼?答 import比起 include的好處就是不會引起交叉編譯。在 oc中 import 被當成 include 指令的改良版本來使用。除此之外,import 確定乙個檔案只能被匯入一次,這使你在遞迴包含中不會出現問題。一般來說,在匯入 ...
面試前必須要知道的Redis面試題
回顧前面 從零單排學redis 青銅 從零單排學redis 從零單排學redis 從零單排學redis 鉑金一 從零單排學redis 鉑金二 redis 今天來分享一下redis幾道常見的面試題 如何解決快取雪崩?如何解決快取穿透?如何保證快取與資料庫雙寫時一致的問題?一 快取雪崩 1.1什麼是快取...
面試前必須要知道的Redis面試題
今天來分享一下redis幾道常見的面試題 回顧一下我們為什麼要用快取 redis 現在有個問題,如果我們的快取掛掉了,這意味著我們的全部請求都跑去資料庫了。在前面學習我們都知道redis不可能把所有的資料都快取起來 記憶體昂貴且有限 所以redis需要對資料設定過期時間,並採用的是惰性刪除 定期刪除...