Python Flags
def flags(a: list[int]) -> int:
size = len(a)
if size == 0:
return 0
peaks = [False] * size
for i in range(1, size):
next_val = a[i + 1] if i + 1 < size else 0
peaks[i] = a[i - 1] < a[i] and a[i] > next_val
next_peak = [0] * size
next_peak[size - 1] = -1
for i in range(size - 2, -1, -1):
next_peak[i] = i if peaks[i] else next_peak[i + 1]
i = 1
result = 0
while i * (i - 1) <= size:
pos = 0
num = 0
while pos < size and num < i:
pos = next_peak[pos]
if pos == -1:
break
num += 1
pos += i
i += 1
result = max(result, num)
return result
This finds all peaks first, then checks how many flags can be placed while keeping the required distance.