LeetCode 560 和為K的子陣列

2022-03-16 23:33:00 字數 1153 閱讀 9411

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

示例 1 :

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

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

說明 :

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

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

看到這題,我唯一能想到的解決方法就是暴力法(或列舉法)

定下兩個下表start、end,使用兩次for迴圈,外層關於end並依次從0開始向後移動,內層關於start並從end開始向前移動。

因為題目中要求的是「連續的子陣列」,因此就直接構造了[start,end]的陣列,並對其求和sum。

只要sum值等於k值,那我們用計數count記錄。

最後函式返回count即可。

方法很簡單,這樣分析的話,不需要用到什麼額外的空間,所以空間複雜度為o(1);時間複雜度方面,由於使用兩次for迴圈對陣列進行遍歷為o(n2),再加上求和時間為o(1),因此總體的**時間複雜度為o(n2)**。

class solution 

}return count;}/*

時間複雜度:o(n^2),n為陣列的長度;兩層迴圈o(n^2)+求和時間為o(1)

空間複雜度:o(1),無需其他儲存空間的使用*/}

剛看到這題的時候,注意到難度為「中等」,我想肯定不止有這種方法,而且這種方法過於簡單,肯定有更高效的、更有技術含量的演算法。

於是,去看了他人的演算法,發現使用了雜湊表。

可是,我還不會雜湊表啊

接下來這段時間,得找時間把雜湊表這塊學一點。

當然,是假的!!!

暴力解法、字首和、字首和雜湊表優化

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 解法1 暴力法 p...

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 ...