2
def minMoves(self, nums: List[int], k: int) -> int:3
p = [i for i, v in enumerate(nums) if v == 1]4
# p[i]: the position of i-th 17
# presum[i]: sum(p[0]...p[i-1])9
presum[i + 1] = presum[i] + p[i]17
for i in range(radius, n - radius):18
# i-radius ... i ... i+radius21
right = presum[i + radius + 1] - presum[i + 1]23
left = presum[i] - presum[i - radius]24
res = min(res, right - left)25
return res - radius * (radius + 1)29
for i in range(radius, n - radius - 1):30
# i-radius ... i i+1 ... i+radius+131
# move radius to i (moving to i+1 is also OK)32
# i+1, ..., i+radius+133
right = presum[i + radius + 2] - presum[i + 1]35
left = presum[i] - presum[i - radius]36
res = min(res, right - left - p[i])37
return res - radius * (radius + 1) - (radius + 1)