和为K的连续子数组
给定一个无序数组 arr , 其中元素可正、可负、可0。给定一个整数 k ,求 arr 所有连续子数组中累加和为k的最长连续子数组长度。保证至少存在一个合法的连续子数组。
[1,2,3]的连续子数组有[1,2],[2,3],[1,2,3] ,但是[1,3]不是
要求:时间复杂度 O(n),空间复杂度 O(n)s = 0 # 前缀和 for i in range(N): s += arr[i] if s - k in book: if i - book[s - k] > mx_len: mx_len = i - book[s - k] if s not in book: # 记录前缀和的最早位置 book[s] = i
Last updated