79301239

Date: 2024-12-22 15:34:31
Score: 1
Natty:
Report link

Java version using this: https://codility.com/media/train/solution-flags.pdf And binary search. Got 100% and O(N).

public int solution(int[] A) {
    int N = A.length;
    boolean[] peaks = new boolean[N];
    for (int i = 1; i < N - 1; i++) {
        if (A[i - 1] < A[i] && A[i] > A[i + 1]) {
            peaks[i] = true;
        }
    }
    return binarySearch(A, 0, (int) Math.sqrt(N) + 2, peaks) - 1;
}

public static int binarySearch(int[] arr, int low, int high, boolean[] peaks) {
    if (high >= low) {
        int mid = low + (high - low) / 2;
        if (!check(mid, arr, peaks)) {
            return binarySearch(arr, low, mid - 1, peaks);
        }
        return binarySearch(arr, mid + 1, high, peaks);
    }
    return low;
}

public static boolean check(int x, int[] A, boolean[] peaks) {
    int N = A.length;
    int flags = x;
    int pos = 0;
    while (pos < N && flags > 0) {
        if (peaks[pos]) {
            flags -= 1;
            pos += x;
        } else {
            pos += 1;
        }
    }
    return flags == 0;
}
Reasons:
  • Probably link only (1):
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Low reputation (1):
Posted by: Alvaro Neira