题干:
给你一个整数数组 nums
和一个整数 k
,请你统计并返回 _该数组中和为 k
的子数组的个数。
子数组是数组中元素的连续非空序列。
示例 1:
**输入:**nums = [1,1,1], k = 2 **输出:**2
示例 2:
**输入:**nums = [1,2,3], k = 3 **输出:**2
提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
解题思路:
- 暴力法
O(n^2)
尝试使用暴力法,第一次运气比较好,居然通过了。但是再提交就提示超出时间限制了。
暴力法是两重循环,我们是否有方案,能减少循环的次数,让他们提前退出呢?
- 这个思路貌似行不通,因为我们不能改变数组的顺序,而数组本身也是没有顺序的,我们没法在遍历到下一个item之前就判断当前的遍历绝对不能成功。
- 但是很明显,我们做了很多重复的工作。
如何求解???
奇怪,看了官方的题解后,发现官方也是暴力求解,然而居然通过了?
那么有没有其他更优秀的解法呢?