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