1. Array - Sliding Window
第二条原则主要是为了和用dynamic programming求subarray的问题区别开,比如:
# 正整数数组, 求sum为target的subarray
# => sliding window
def subarray_sum_positive(arr, target):
window_sum = 0
start_idx = 0
for end_idx in range(len(arr)):
window_sum += arr[end_idx]
while window_sum > target:
window_sum -= arr[start_idx]
start_idx += 1
if window_sum == target:
return arr[start_idx:(end_idx+1)]
return None
# 有负数的整数数组, 求sum为target的subarray
# => prefix sum (dynamic programming)
def subarray_sum(arr, target):
sum_idx_map = {0: -1}
sum = 0
for idx, ele in enumerate(arr):
sum += ele
if sum - target in sum_idx_map:
start_idx = sum_idx_map[sum - target] + 1
return arr[start_idx:(idx+1)]
sum_idx_map[sum] = idx
return NoneLast updated