class Solution{ public cutPiles(int[] piles, int target){ int max = 0; for(int pile : piles){ max = Math.max(max, pile); } int lo = 1, hi = max; while(lo < hi){ int mid = lo + (hi - lo) / 2; int cuts = getCounts(piles, mid); if(target < cuts) hi = mid; else lo = mid + 1; } return hi - 1; } private int getCounts(int[] piles, int cut){ int cuts = 0; for(int pile : piles) if(pile >= cut) cuts += pile / cut; return cuts; } }