Untitled

 avatar
unknown
c_cpp
2 months ago
869 B
6
Indexable
bool isValid(vector<int>& arr, int n, int k, int maxDiff) {
    int changes = 0;
    vector<int> modified = arr;

    for (int i = 0; i < n - 1; ++i) {
        if (abs(modified[i + 1] - modified[i]) > maxDiff) {
            modified[i + 1] = modified[i] + (modified[i + 1] > modified[i] ? maxDiff : -maxDiff);
            changes++;
        }
        if (changes > k) return false;
    }
    return true;
}
int minimizeHardness(vector<int>& arr, int n, int k) {
    if (n <= 1) return 0;

    int left = 0, right = *max_element(arr.begin(), arr.end()) - *min_element(arr.begin(), arr.end());
    int result = right;

    while (left <= right) {
        int mid = left + (right - left) / 2;

        if (isValid(arr, n, k, mid)) {
            result = mid; 
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return result;
}

Leave a Comment