leetcode 560 和為k的子陣列

2021-09-02 18:39:29 字數 915 閱讀 5797

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

示例 1 :

輸入:nums = [1,1,1], k = 2

輸出: 2 , [1,1] 與 [1,1] 為兩種不同的情況。

說明 :

陣列的長度為 [1, 20,000]。

陣列中元素的範圍是 [-1000, 1000] ,且整數k的範圍是 [-1e7, 1e7]。

解法1:暴力法

public int subarraysum(int nums, int k) 

}return res;

}

解法2:雜湊表

用乙個雜湊表來建立連續子陣列之和跟其出現次數之間的對映,初始化要加入這對對映,這是為啥呢,因為我們的解題思路是遍歷陣列中的數字,用sum來記錄到當前位置的累加和,我們建立雜湊表的目的是為了讓我們可以快速的查詢sum-k是否存在,即是否有連續子陣列的和為sum-k,如果存在的話,那麼和為k的子陣列一定也存在,這樣當sum剛好為k的時候,那麼陣列從起始到當前位置的這段子陣列的和就是k,滿足題意,如果雜湊表中事先沒有m[0]項的話,這個符合題意的結果就無法累加到結果res中,這就是初始化的用途。

map.getordefault:當map集合中有這個key時,就使用這個key值,如果沒有就使用預設值。

public int subarraysum(int nums, int k) 

map.put(sum, map.getordefault(sum, 0) + 1);

}return res;

}

LeetCode 560 和為K的子陣列

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

Leetcode 560 和為K的子陣列

560.和為k的子陣列 一開始用的窮舉,超時了 class solution def subarraysum self,nums list int k int int counter 0for i in range len nums sum 0 a i while a len nums 1 sum ...

LeetCode560 和為K的子陣列

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