和為K的子陣列,想不到的,就是想不到。

2021-10-06 04:51:43 字數 1096 閱讀 5965

今天遇到這個,只想到了暴力破解。leetcode

給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。

示例 1

:輸入:nums =[1

,1,1

], k =

2輸出:2,

[1,1

] 與 [1,

1] 為兩種不同的情況。

我想到的是暴力破解,見**,外層遍歷陣列,內層以該元素為結尾,累加之前的,和為k,結果加1。這樣不會重也不會漏。

public

intsubarraysum

(int

nums,

int k)}}

return res;

}

時間複雜度o(n2),空間複雜度o(1)

官方給了另外一種,時間複雜度o(n)的解法,不容易想到,但一旦看明白了,實現起來很簡單。

public

intsubarraysum

(int

nums,

int k)

map.

put(pre, map.

getordefault

(pre,0)

+1);

}return res;

}

map裡,k是陣列前 i 個數的和,v 是出現的次數。

舉下例子[4,2,-2,1,1,3]

map 中會有這幾個鍵值對,(0,1),(4,2),(6,2),(5,1),(9,1)

比如連續子陣列和為3出現了幾次,

9 - 6 = 3,只有這一種,和為6有兩種,

即前兩個數,和為6,

前五個數和也為6

當遍歷到第六個數時,我就知道,這前六個數中[4,2,-2,1,1,3],

去掉前兩個[4,2],剩下的[-2,1,1,3]和為3,

去掉前五個[4,2,-2,1,1],剩下[3]和為3

**不容易想到,一旦想清楚了,實現是很簡單。如果還不清楚,看著**,多想幾次試試。

和為k的子陣列

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

和為k的子陣列

給你乙個整數陣列nums和乙個整數k,請你統計並返回該陣列中和為k的連續子陣列的個數 示例 1 輸入 nums 1,1,1 k 2 輸出 2示例 2 輸入 nums 1,2,3 k 3 輸出 2 一般看到陣列中的連續子陣列求和,我們會想到使用字首和 解法 字首和 public static int ...

560 和為K的子陣列

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