class Solution {
public:bool check(vector<int> &nums,int max_num,int k){//只需要计算可以偷的房间。在满足最大值为max_num下时,能偷的最多的房间,与k值比较//如果大于K,说明max_num还可以缩小//如果小于看,说明max_num需要放大int count=0;for(int i=0;i<nums.size();i++){if(nums[i]<=max_num){count++; //计数i++; //下一个不能偷}}return count>=k;}int minCapability(vector<int>& nums, int k) {//在满足偷k个房间的所有情况下,找出最小的窃取能力。每种情况中房屋金额最大值,为该情况的窃取能力//目标:所有情况中最小的窃取能力//二分答案int left=0,right=*max_element(nums.begin(),nums.end());while(left+1<right) //开{int mid=(left+right)/2;if(check(nums,mid,k))//能整好偷,或偷的个数要多,需要减小最大值right=mid;else left=mid;}return right;}
};