欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > 力扣560.和为K的子数组

力扣560.和为K的子数组

2025/11/25 22:45:33 来源:https://blog.csdn.net/qq_51352130/article/details/148063375  浏览:    关键词:力扣560.和为K的子数组

文章目录

  • 题目介绍
  • 题解

题目介绍

在这里插入图片描述

题解

前缀和+哈希表(两数之和):
在这里插入图片描述

代码如下:

class Solution {public int subarraySum(int[] nums, int k) {int n = nums.length;int[] s = new int[n + 1];for (int i = 0; i < n; i++) {s[i + 1] = s[i] + nums[i];}int res = 0;Map<Integer, Integer> map = new HashMap<>(n + 1); // 设置容量可以快 2msfor (int he : s) {res += map.getOrDefault(he - k, 0);map.put(he, map.getOrDefault(he, 0) + 1); // map[he]++}return res;}
}

错解:这种方法只适用于数组中所有元素都是正数的情况。 当数组中包含负数时,滑动窗口就不能保证正确性了。 例如,nums = [-1, -1, 1] 和 k = 0,你的算法会漏掉 [-1, -1, 1] 这个子数组。

class Solution {public int subarraySum(int[] nums, int k) {int res = 0, len = nums.length, l = 0, sum = 0;for (int r = 0; r < len; r++) {sum += nums[r];if (sum == k) {res++;}while (sum > k && l <= r) {sum -= nums[l++];if (sum == k) {res++;}}}return res;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词