public int copyBooks(int[] pages, int k) {
        int l = 0;  
        int r = 99999999;  
        while(l+1<r)  
        {  
            int mid = (l+r)/2;  
            if(check(mid,pages,k))  
            {  
                r = mid;  
            }  
            else  
                l = mid;  
        }  
        return r;  
    }  

    boolean check(int index,int[] pages,int k)  
    {  
        int count = 0;  
        int sum = 0;  

        for(int i=0;i<pages.length;)  
        {  
            if(sum+pages[i]<=index)  
            {  
                sum+=pages[i++];  
            }  
            else if(pages[i]<=index)  
            {  
                count++;  
                sum = 0;  
            }  
            else  
                return false;  
        }  

        if(sum!=0)  
            count++;  
        return count<=k;  
    }

results matching ""

    No results matching ""