题目描述
给定n个正整数组成的数组,求平均数正好等于k的最长连续子数组的长度。
输入描述
第一行输入两个正整数n和k,用空格隔开
第二行输入n个正整数,用来表示数组
示例1
输入
5 2
1 3 2 4
输出
3
解答
分析:假设平均数为k,那么[i,j]范围内的和则为 k*(j-i+1)。为了更方便表示,那么可以初始将所有元素-k,其和则为0,或sum(j) - sum(i) = 0。代码如下
def solve(arr):
hash_map = {}
s = 0
ans = -1
for i, v in enumerate(arr):
s += v
if s == 0:
ans = max(ans, i+1)
try:
idx = hash_map[s]
ans = max(ans, i - idx)
except:
hash_map[s] = i
return ans
if __name__ == "__main__":
avg = 2
arr = [1,3,2,4,1,1]
arr = map(lambda x: x-avg, arr)
print(solve(arr))