連續的子陣列之和

2021-10-04 23:14:34 字數 1242 閱讀 8058

如果直接用優雅一點的暴力應該可以跑過

比較每一對子陣列判斷是否為k的倍數

最壞情況下是k需要最後兩個資料相加才使得條件成立,時間複雜度為:o(n^2)

tips:一定要注意細節特殊處理0, 面對0無法進行取餘,只有0是0的倍數因此搜尋連續兩個及以上的0即為true

(這裡都是血和淚)

cpp**如下

class

solution

return

false;}

// 特別考慮k = 0的情況

for(

int i=

0; i

size()

;++i)

}return

false;}

};

參考題560 和為k的連續子陣列

思路是一樣的不需要求出所有累加和

這裡要求的是所有滿足是k的倍數的資料

因此可以用到取模

if a mod b = c mod b

then a - c mod b = 0

由上述關係我們可以知道,我們每求得乙個sum就對他取餘,然後在到已有的資料中尋找如果有餘數和他一樣的那他倆的差一定是k的倍數

注意:題目中還要求至少兩個數,因此我們需要儲存其索引值,如果相減索引值大於1即為所求(sum的和表示的範圍是[0,i])

初始化的mp[0] = -1;

為什麼要初始化看第560題

c++**實現如下

class

solution

return

false;}

};

維護當mp陣列中不存在的時候再插入否則會導致輸出錯誤,例如[7,7,7],7

如果直接插入的話會導致輸出false.

由於取模值都一樣會不斷被覆蓋

時間複雜度:o(n)

空間複雜度:o(min(n,k))

但其實在小資料下hash的速度並不會比暴力快多少,由於hash表的訪問時間複雜度並不是嚴格意義上的o(1)還有增大的k係數實際上只快了30m

求最大連續子陣列之和

給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和 為20。6 211 4 13 5 2 10 1012 34 5 23 37 21 65 8 3 2 5 0110 3 1 5 23 1 0 ...

劍指offer 連續子陣列之和

題目描述 hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個...

求陣列中任何連續子向量之和

我們有乙個陣列,裡面包含 10個元素 31,41,59,26,53,58,97,93,23,84 如何求出裡面最大的連續子向量之和呢?該程式應該輸出下標為x 2,6 之間的和,187為最大。當所有數是正數的時候,問題很容易解決,但是如果包含了負數,可就難了。有乙個迭代演算法,採用動態規劃的思想 ma...