链接:
题意
n个数字,相邻不能选,选择的结果为 选中的数字中的最大数字,要求最少选k个数字
求这个结果最小能是多少
解:
怎么就从DP变成二分了呢?
关键字:最大的最小
最少选k个数字,又要结果最小,那尽量少选且使选中的最大数字最小,则题目变成:选择k个数字,使<选中的数字中最大的数字>最小(选的越少,选取条件越宽松,则理论上能取的数字越小)
二分答案,Check逻辑:贪心,能选的就选上,只要满足小于等于temp_ans就先选上,选够了k个说明这个temp_ans合法
实际代码:
#include
using namespace std;
bool check(vector& nums,int limit, int k)
{
int xz=0;
for(int i=0;i=k) return true;
i++;
}
}
return false;
}
int minCapability(vector& nums, int k)
{
int l=0,r=0;
for(auto num:nums) r=max(r,num);
while(l>1;
cout< 限制:
1 <= nums.length <= 1051 <= nums[i] <= 1091 <= k <= (nums.length + 1)/2