和为K的子数组出现了多少个
思路前缀和哈希表记录前缀和出现次数和为k将k视为一个区间。子数组要想到区间和然后想到前缀和。prefix_sum(prefix_sum-k)kdef subArraySum(k,nums): cnt0 prefix_sum0 mp{0:1} #初始化前缀和为0的子数组出现次数为1 for i in range(len(nums)): prefix_sumnums[i] if prefix_sum-k in mp: #关键 cntmp[prefix_sum-k] mp[prefix_sum]mp.get(prefix_sum,0)1 print(cnt) def main(): kint(input()) lineinput() numslist(map(int,line.split())) subArraySum(k,nums) if __name____main__: main()也可以这样写先处理前缀和数组这样就不用像上面那样初始化mp了cnt0 mp{} prefix[0]*(len(nums)1) for i in range(len(nums)): prefix[i1]prefix[i]nums[i] for j in prefix: if j-k in mp: cntmp[j-k] mp[j]mp.get(j,0)1 print(cnt)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2504925.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!