力扣题集:
1748.唯一元素的和
2206.将数组划分为相等数对
1832.判断句子是否为全字母
1512.好数对的数目
2006.差的绝对值为 K 的数对数目
930.和相同的二元子数组
560.和为 K 的指数组(键指对)
454.四数相加(键指对)
160.相交链表(键指对,指针定义)
int numSubarraysWithSum(int* nums, int numsSize, int goal){
int i=0;
int hash[60010];
int ans=0;
memset(hash,0,sizeof(hash));初始化
for(i=1;i<numsSize;i++)迭加求和
nums[i]+=nums[i-1];
hash[goal]=1;//t为-1时拿出来看sum[-1]+goal=goal
for(i=0;i<numsSize;i++)
{
ans+=hash[nums[i]];
++hash[nums[i]+goal];
}
return ans;
}
循环将nums数组迭加
nums[i]现在代表的是从头到i元素之和
设存在i>t,sum[i]-sum[t]代表nums[t+1]+...+nums[t]
题中条件为sum[i]-sum[t]=goal
可以变换为sum[i]=sum[t]+goal
i范围是0~numsSize
t范围是-1~(numsSize-1)
每次算出sum[t]+goal相等即为sum[i]满足条件
用哈希表记下sum[t]+goal出现的次数
答案每次加上使当前sum[i]满足条件的sum[t]+goal,即为ans+=hash[nums[i]+goal]