560. 和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
我的解法,就是很简单的那种两层循环,没啥好说的。这题是不会超时,能通过。
class Solution {
public int subarraySum(int[] nums, int k) {
int total = 0;
for (int i = 0; i < nums.length; i++) {
int j = i + 1;
int sum = nums[i];
if(sum == k){
total++;
}
while (j < nums.length) {
sum += nums[j];
if (sum == k) {
total++;
}
j++;
}
}
return total;
}
}
官方解法
和最开始做的几道题很像,都是用map来减少一层循环。但是这题还多了一些弯弯。思想就是从数组下标0到数据下标i,这一串数字的和记为sum1,从数据从数组下标0到数据下标j,这一串数字的和记为sum2。如果sum2-sum1=k的话,下标i+1到j就是一个符合条件的字数组。
编码时就是把各个和存进map的key,value存的是这个和出现的次数。
public class Solution {
public int subarraySum(int[] nums, int k) {
int count = 0, pre = 0;
HashMap < Integer, Integer > mp = new HashMap < > ();
mp.put(0, 1);
for (int i = 0; i < nums.length; i++) {
pre += nums[i];
if (mp.containsKey(pre - k)) {
count += mp.get(pre - k);
}
mp.put(pre, mp.getOrDefault(pre, 0) + 1);
}
return count;
}
}
作者:力扣官方题解
链接:https://leetcode.cn/problems/subarray-sum-equals-k/solutions/238572/he-wei-kde-zi-shu-zu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。