在python 语言中,解决这道题,使用暴力方法一定会遇到超时的问题,为此使用类似hash表的‘巧妙'一点的O(n)的方法。
Loading...leetcode.com题目描述:
给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。
最容易想到是使用暴力的解法,先确定子序列的起始位置,起始位置可以是从0,1,……开始,然后遍历计算每个开始位置上的序列和,写出如下算法
def
这样可以得到正确结果,但是会得到超时的问题。
下面使用字典记录之前存在的累加和的值,每次得到一个累加和sum,判断k-sum,如果有的话,从出现位置截胡,就可以得到和k。
from collections import defaultdict
def sum_k(vector,k):
array_num=len(vector)
sums_so_far=defaultdict(int)
numbers=0
sum_array=0
for i in range(array_num):
sum_array+=vector[i]
if sum_array==k:
numbers+=1
if (sum_array-k) in sums_so_far:
numbers+=sums_so_far[sum_array-k]
sums_so_far[sum_array]+=1
return numbers