560 和為K的子陣列

2021-10-18 10:53:25 字數 576 閱讀 9903

有負數,不能用滑動視窗了。考慮字首和思想,用乙個map記錄從0到i的每個和是否出現過,用讓res+=ma[當前和-k],為什麼是+=,而不是判斷有無這個鍵然後+1呢,因為有負數啊!!我們需要的那個字首和可能多次出現了,所以res+上所有從0到i出現這個字首和的個數。

舉個例子,我們有1,2,3,然後k是5,累加和最後到6,所以我們只要減去一段和為1的字首和即可,用ma判斷和為1的字首和有幾種情況,全讓res加上

class

solution};

int res =0;

int sum =0;

//記錄從0到i的和為多少,然後判斷sum-k的字首和有幾個

//意思就是123,我們要求和為5的,就一路加,1,3,6,最後一次判斷ma[6-5]不為0,也就是有一段從0到某乙個數字x的區間值為1,那麼從x到當前數字的和就是5

for(

int x:nums)

return res;}}

;

560 和為K的子陣列

題解 1.維護乙個unordered map 字首陣列和,count 2.遍歷陣列的累加和,如果存在sum k,在 unordered map裡面,則有count種情況 複雜度分析 解題思路 一 建立map表用於儲存每個連續子陣列sum求和出現的次數,初始化為 0,1 表示和為0的連續子陣列出現1次...

560 和為K的子陣列

給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。示例 1 輸入 nums 1,1,1 k 2 輸出 2 1,1 與 1,1 為兩種不同的情況。求的是sum i,j k的個數。這個式子可以進行一些分解 分解1 sum i,j sum i,j 1 nums j k 變成...

560 和為K的子陣列

給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。示例 1 輸入 nums 1,1,1 k 2 輸出 2 1,1 與 1,1 為兩種不同的情況。說明 陣列的長度為 1,20,000 陣列中元素的範圍是 1000,1000 且整數 k 的範圍是 1e7,1e7 clas...