LeetCode 和等於 k 的最長子陣列長度

2022-06-24 08:18:10 字數 1176 閱讀 5843

q:給定乙個陣列 nums 和乙個目標值 k,找到和等於 k 的最長子陣列長度。如果不存在任意乙個符合要求的子陣列,則返回 0。

注意:nums 陣列的總和是一定在 32 位有符號整數範圍之內的。

示例 1:

輸入: nums = [1, -1, 5, -2, 3], k = 3

輸出: 4

解釋: 子陣列 [1, -1, 5, -2] 和等於 3,且長度最長。

示例 2:

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

輸出: 2

解釋: 子陣列 [-1, 2] 和等於 1,且長度最長。

高階:你能使時間複雜度在 o(n) 內完成此題嗎?

a:我覺得我有毛病,我竟然第一時間用遞迴……不過就算用了memo,也超時了

private int len = 0;

private setset;

public int maxsubarraylen(int nums, int k)

private void sum(int nums, int k, int left, int right, int count)

sum(nums, k, left + 1, right, count - nums[left]);

if (right + 1 < nums.length)

sum(nums, k, left, right + 1, count + nums[right + 1]);

}

字首和+map

計算出每個索引的字首和,利用hashmap儲存每個字首和和對應的索引,如果出現字首和相同的情況,則儲存較小的索引(因為要求最長子陣列);利用乙個指標i作為子陣列的結尾從後向前遍歷(從前往後要判斷索引位置在當前位置的前還是後,從後往前無需判斷,因為如果在後為負),尋找map中是否儲存有key為sum[i] - k的索引,如果有則更新max。當指標的值小於等於max的值後,則無需再繼續遍歷

public int maxsubarraylen(int nums, int k) 

for (int i = sums.length - 1; i > maxlen; i--)

}return maxlen;

}

325 和等於 k 的最長子陣列長度

題目描述 給定乙個陣列 nums 和乙個目標值 k,找到和等於 k 的最長子陣列長度。如果不存在任意乙個符合要求的子陣列,則返回 0。注意 nums 陣列的總和是一定在 32 位有符號整數範圍之內的。示例 1 輸入 nums 1,1,5,2,3 k 3 輸出 4 解釋 子陣列 1,1,5,2 和等於...

求累加和小於等於k的最大子矩陣

來自牛客網左程雲第三課第二題 問題 給定乙個無序矩陣,其中有正,有負,有 0,再給定乙個值 k,求累加和小於等於 k 的最大子矩陣大小,矩陣的大小用其中的元素個數來表示。分析 這個問題也是乙個子矩陣問題,參看求子矩陣的最大和的分析,我們同樣可以將其轉換成子陣列問題。本題的演算法原型是未排序陣列中累加...

陣列中和等於K的數對

1001 陣列中和等於k的數對 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個整數k和乙個無序陣列a,a的元素為n個互不相同的整數,找出陣列a中所有和等於k的數對。例如k 8,陣列a 所有和等於8的數對包括 1,9 0,8 2,6 3,5 input 第1...