Java Peaks
public class Solution {
    public static int peaks(int[] a) {
        int n = a.length;
        if (n <= 2) {
            return 0;
        }

        int[] sum = new int[n];
        int last = -1;
        int dist = 0;
        for (int i = 1; i + 1 < n; ++i) {
            sum[i] = sum[i - 1];
            if (a[i] > a[i - 1] && a[i] > a[i + 1]) {
                dist = Math.max(dist, i - last);
                last = i;
                ++sum[i];
            }
        }

        sum[n - 1] = sum[n - 2];
        if (sum[n - 1] == 0) {
            return 0;
        }
        dist = Math.max(dist, n - last);

        int j = 0;
        for (int i = (dist >> 1) + 1; i < dist; ++i) {
            if (n % i == 0) {
                last = 0;
                for (j = i; j <= n; j += i) {
                    if (sum[j - 1] <= last) {
                        break;
                    }
                    last = sum[j - 1];
                }
                if (j > n) {
                    return n / i;
                }
            }
        }

        for (last = dist; n % last != 0; ) {
            ++last;
        }

        return n / last;
    }
}

This finds the peak positions, then tests how many equal blocks can each contain at least one peak.