[可分性]NailingPlanks

7401 ワード

私の答え
function solution(A, B, C) {
    // write your code in JavaScript (Node.js 8.9.4)
    let start = 0;
    let end = C.length-1;
    let mid;
    let answer = -1;


    while(start <= end) {
        mid = Math.floor((start+end)/2);
       
        if (check(A,B,C,mid)) {
            end = mid-1;
            answer = mid+1;
        } else {
            start = mid+1;
        }
        
    }

    return answer;
}

function check(a, b, c, num) {
    var pNails = new Array(2*c.length + 1).fill(0);
    for (var i = 0; i <= num; ++i) {
        ++pNails[c[i]];
    }
    for (i = 1; i < pNails.length; ++i) {
        pNails[i] += pNails[i-1];
    }
    for (i = 0; i < a.length; ++i) {
        if (pNails[b[i]] <= pNails[a[i]-1]) return false;
    }
    return true;
}