對於陣列和的處理
考慮i到j的和 為 sum(:j)-sum(:i)用來替代中間和
給定乙個整數陣列 a,返回其中元素之和可被 k 整除的(連續、非空)子陣列的數目。
示例:輸入:a = [4,5,0,-2,-3,1], k = 5
輸出:7
解釋:有 7 個子陣列滿足其元素之和可被 k = 5 整除:
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]
1 <= a.length <= 30000
-10000 <= a[i] <= 10000
2 <= k <= 10000
解答:想法:
1 一開始想到暴力解答,迴圈得到sum然後得到mod,滿足則加一,百分百超時
2 考慮使用字典記錄已經存在的i,j區間的mod,使用回溯法,最後仍然超時,也是進行了n^2的遍歷
3. 看答案,對mod進行字典儲存,同一mod的區間相減 肯定滿足被k整除!對key的val進行遍歷,使用c(n,2)的概率統計法,則可以得到該mod的整除區間
(特殊情況:mod為0的情況,自加一!因為本身相當於多乙個起點,一開始就能做到被整除)
**:
class
solution
:def
subarraysdivbyk
(self, a, k)
: temp =
count =
0for i in
range
(len
(a))
: count+=a[i]
a,b =
divmod
(count,k)
if b in temp:
temp[b]+=1
else
:#print(i,b)
temp[b]=1
#print(temp)
res =
0for key in temp:
if temp[key]
>1:
res+=
(temp[key]
*(temp[key]-1
))/2
return
int(res)
su = solution(
)arr =[4
,5,0
,-2,
-3,1
]k =
5res = su.subarraysdivbyk(arr,5)
print
(res)
演算法 陣列和視窗 陣列
給定乙個整型陣列arr和乙個大小為w的視窗,視窗從陣列最左邊滑動到最右邊,每次向右滑動乙個位置,求出每一次滑動時視窗內最大元素的和。輸入第一行為用例個數,每個測試用例輸入的第一行為陣列,每乙個元素使用空格隔開 第二行為視窗大小。輸出每個測試用例結果。14 3 5 4 3 3 6 7 3 陣列與視窗 ...
演算法 陣列和鍊錶
注 本文僅為筆記。原文 一維陣列記憶體定址公式 對於二維陣列 a n a i addr base addr i type size 二維陣列記憶體定址公式 對於二維陣列 a m n a i j addr base addr i n j type size 三維陣列記憶體定址公式 對於三維陣列 a m...
演算法 陣列和鍊錶
注 本文僅為筆記。原文 一維陣列記憶體定址公式 對於二維陣列 a n a i addr base addr i type size 二維陣列記憶體定址公式 對於二維陣列 a m n a i j addr base addr i n j type size 三維陣列記憶體定址公式 對於三維陣列 a m...