标签:+= ntc nbsp class turn ram length 大于等于 直接
最后一种二分法的可能情况:最终的答案是二分的。也就是说答案是处在sort array中的,需要每次验证一下mid对应的值是偏大还是偏小。
例 lintcode 183. Wood Cut https://www.lintcode.com/problem/wood-cut/description
从考虑答案的角度,切割长度从1开始增加,长度为1的时候可能切出几百根,为2时几百根,随着长度增加,能切出的根数逐渐减小,直到到达最小的 大于等于k 的根数,即找对应根数大于等于k的最后一个位置,所以相等的时候可以直接返回,也可以left = mid区间向右缩进。
public class Solution { /** * @param L: Given n pieces of wood with length L[i] * @param k: An integer * @return: The maximum length of the small pieces */ public int woodCut(int[] L, int k) { int left = 1, right = findLongest(L); while(left + 1 < right){ int mid = (left + right) >>> 1; if(numOfPices(L, mid) < k) right = mid; else left = mid; } if(numOfPices(L, right) >= k) return right; if(numOfPices(L, left) >= k) return left; return 0; } public int numOfPices(int[] L, int len){ int num = 0; for(int i = 0;i < L.length;i++){ num += L[i]/len; } return num; } public int findLongest(int[] L){ int max = 0; for(int i = 0; i < L.length;i++){ if(L[i] > max) max = L[i]; } return max; } }
标签:+= ntc nbsp class turn ram length 大于等于 直接
原文地址:https://www.cnblogs.com/2333wzl/p/12247268.html