Leetcode::Minimize Maximum of Array

point

Design

Big O(time)

Code

class Solution {
public:
    typedef long long ll;
    vector<ll> a;
    bool check(vector<ll> v, ll mx){
        for(int i = (int)v.size()-1; i > 0; i--){
            if(v[i] > mx){
                ll gap = v[i] - mx;
                v[i-1] += gap;
                v[i] -= gap;
            }
        }
        return v[0] <= mx;
    }
    int bs(vector<ll> nums, int le, int ri){
        
        while(le < ri){
            int mid = (le + ri) / 2;
            if(check(nums, mid)) ri = mid;
            else le = mid + 1;
        }
        return ri;
    }
    int minimizeArrayValue(vector<int>& nums) {
        for(auto x : nums) a.push_back(x);
        int ret = bs(a, 0, 1e9);
        return ret;
    }
};