题目:
例子:
思路:
需要转变题意,题意是:
需要找到在偷k个房子时,偷到的房子中最大金额的房子的值最小。
因此,当偷的房子逐渐增多时,偷到的金额是保持递增的,所以采用二分法来选取。
通过限定房子的个数来判断,使用偷到的最小房子数来作为二分终止条件。
代码:
class Solution {
public int minCapability(int[] nums, int k) {
//数组中的最大最小值
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for(int num:nums){
min = Math.min(min,num);
max = Math.max(max,num);
}
//开始二分
while (min < max) {
boolean flag = false;
int count = 0;
int mid = (min + max) >> 1;
for (int num : nums) {
if (num <= mid && !flag) {
count++;
flag = true;
} else {
flag = false;
}
}
if (count >= k) {
max = mid;
} else {
min = mid + 1;
}
}
return min;
}
}