2023-09-19力扣每日一题

链接:

2560. 打家劫舍 IV

题意

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 <= 105
  • 1 <= nums[i] <= 109
  • 1 <= k <= (nums.length + 1)/2

你可能感兴趣的:(力扣每日一题,leetcode,算法)