Python Peaks
def peaks(a: list[int]) -> int:
n = len(a)
if n <= 2:
return 0
total = [0] * n
last = -1
dist = 0
for i in range(1, n - 1):
total[i] = total[i - 1]
if a[i] > a[i - 1] and a[i] > a[i + 1]:
dist = max(dist, i - last)
last = i
total[i] += 1
total[n - 1] = total[n - 2]
if total[n - 1] == 0:
return 0
dist = max(dist, n - last)
for i in range(dist // 2 + 1, dist):
if n % i == 0:
last = 0
j = i
while j <= n:
if total[j - 1] <= last:
break
last = total[j - 1]
j += i
if j > n:
return n // i
last = dist
while n % last:
last += 1
return n // last
This finds the peak positions, then tests how many equal blocks can each contain at least one peak.