【
给你一个整数数组 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/subarray-sum-equals-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
】
在2020年7月的时候,这道题暴力能过,但后面就一直超时了。最开始看到要用map,但C语言里面没有这个接口便一直没做,其实UTHASH可以模拟简单map功能。
首先求前缀和su'm,然后找k-sum的个数,并累加,及需要的返回值。然后找自身,找到就加一,没找到便加到哈希里。
// 注:用uthash模拟了一把map功能
typedef struct {
int key; // key是前缀和
int val; // val 记录个数
UT_hash_handle hh;
} UT_HASH;
int subarraySum(int* nums, int