力扣2560. 打家劫舍 IV


这一题的大意是给出一个数组,可以从中选取k个不相邻的元素,现在,我们希望这k个元素的最大值最小。

看到最大值最小,果断二分答案。

现在关键就是在check函数中假设这个最大值为x,判断这个x是不算符合最大值即可。

那么如何判断呢?

我们只需要在数组中找到大于等于k个的不相邻的元素,使得它们的值小于等于x即可。

这样就说明在最大值为x的情况下存在符合条件。

cpp 复制代码
class Solution {
public:
    bool check(int x,vector<int>& nums,int k)
    {
       int i=0;
       int cnt=0;;
       while(i<nums.size())
       {
         if(nums[i]<=x)
         {
            cnt++;
            i+=2;
         }
         else
         {
            i++;
         }
       }
       if(cnt>=k)
       {
        return true;
       }
       else{
           return false;
       }

    }
    int minCapability(vector<int>& nums, int k) {
        //最少能偷窃k间房屋
        int l=1;
        int r=1e9;
        int ans=INT_MAX;
        while(l<=r)
        {
            int mid=(l+r)/2;
            if(check(mid,nums,k))
            {
               ans=min(ans,mid);
              r=mid-1;
            }
            else
            {
              l=mid+1;
            }
        }
        return ans;
    }
};

感觉二分答案实际上就是一种逆向思维,假设答案存在,去验证结果。

时间复杂度O(nlogn)

相关推荐
怕浪猫3 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
无线通信科研笔记3 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
mmmmath_34 小时前
二叉树の递归遍历
算法
All for pursuit.5 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
小师兄吃牛肉5 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
一只小小的芙厨7 小时前
【线性DP】
学习·算法·动态规划
奋发向前wcx7 小时前
CSP-J复赛模拟赛5 王晨旭补题 2026.10.5
算法
罗湖老棍子9 小时前
C Looooops(信息学奥赛一本通- P1640)
算法·数论·同余·裴蜀定理·扩展欧几里得
飘尘11 小时前
从"算子"到"AI Infra":大模型背后看不见的那群人在忙什么
人工智能·算法·面试
夏幻灵12 小时前
每日一题:LeetCode 3:无重复字符的最长子串——滑动窗口思路详解
算法·leetcode·职场和发展