AM 1251. Split Array Largest Sum

Code(Language:C++) (Judger:cloudjudge-cluster-7)
class Solution {
public:
    /**
     * @param nums: a list of integers
     * @param m: an integer
     * @return: return a integer
     */
    int splitArray(vector<int> &nums, int m) {
        // write your code here
        // binary search 
        const int size = nums.size();
        if(size < m){
            return -1; 
        }
        long long sum = 0; 
        int maxVal = INT_MIN; 
        for(auto i : nums){
            sum += i; 
            maxVal = max(maxVal, i); 
        }
        int start = maxVal; 
        long long end = sum; 
        while(start < end){ //注意这里和模板不同
            long long mid = start + (end - start) / 2; 
            if(!splitNum(nums, mid, m)){
                start = mid + 1; //注意这里的操作。 
            }
            else{
                end = mid; 
            }
        }
       // if(!splitNum(nums, (long long)end, m)){
       //      return end; 
        //}
        //else{
            return start; 
        //}
    }
    bool splitNum(vector<int> &nums, long long target, int m){
        int res = 1;
        long long sum = 0; 
        for(auto i : nums){
            sum += i; 
            if(sum > target){
                sum = i; 
                res++; 
                if(res > m){
                    return false; 
                }
            }
        }
        return true; 
    }
};

Comments

Popular posts from this blog

算法的比较