• 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    限制:

    • 1 <= nums.length <= 105
    • 1 <= nums[i] <= 109
    • 1 <= k <= (nums.length + 1)/2
  • 相关阅读:
    聊聊MySQL的10大经典错误
    [PAT练级笔记] 03 Basic Level 1004
    Vue3学习笔记
    【PAT甲级】1061 Dating
    CMake系列讲解(入门篇)1.8 基础命令CMake-set() unset()
    可视化交互工具 Dreamview
    [MAUI]在.NET MAUI中实现可拖拽排序列表
    MySQL的安全性
    企业为什么要做等保?不做等保有什么后果?
    从权限系统的菜单管理看算法和数据结构
  • 原文地址:https://blog.csdn.net/Fei_WuYan/article/details/133049755