class Solution {
public int smallestDivisor(int[] nums, int threshold) {
// 判断特例
if (null == nums || nums.length == 0 || threshold == 0)
return 0;
// 二分查找
int max = 1;
for (int i : nums) {
max = Math.max(max, i);
}
// 左边从1开始,
int left = 1, right = max;
while (left < right) {
int mid = left + ((right - left) >> 1);
if (calculateNum(nums, mid) > threshold) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
private int calculateNum(int[] nums, int divisor) {
if (null == nums || nums.length == 0 || divisor == 0)
return 0;
int sum = 0;
for (int num : nums) {
sum += num / divisor;
if (num % divisor != 0)
sum++;
}
return sum;
}
}
LeetCode 1283使结果不超过阈值的最小除数(JAVA)
最新推荐文章于 2022-05-16 11:14:55 发布