【每日一题Day331】LC2560打家劫舍 IV | 二分查找 + 贪心

简介: 【每日一题Day331】LC2560打家劫舍 IV | 二分查找 + 贪心

打家劫舍 IV【LC2560】

沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。

由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋

小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额

给你一个整数数组 nums 表示每间房屋存放的现金金额。形式上,从左起第 i 间房屋中放有 nums[i] 美元。

另给你一个整数 k ,表示窃贼将会窃取的 最少 房屋数。小总能窃取至少 k 间房屋。

返回小偷的 最小 窃取能力。

思路:最小化最大值->二分查找

  • 明确题意:求取至少偷k不相邻的房屋时,小偷的 最小 窃取能力,即最小化偷取房屋金额的最大值。

image.png

class Solution {
    public int minCapability(int[] nums, int k) {
        int n = nums.length;
        int l = Integer.MIN_VALUE, r = 0;
        for (int num : nums){
            r = Math.max(r, num);
            l = Math.min(l, num);            
        }
        while (l <= r){
            int mid = (l + r) / 2;
            if (check(nums, mid, k)){
                r = mid - 1;
            }else{
                l = mid + 1;
            }
        }
        return l;
    }
    public boolean check(int[] nums, int target, int k){
        int n = nums.length;
        int j = -2;
        int count = 0;
        for (int i = 0; i < n; i++){
            if (j + 2 <= i && nums[i] <= target){
                count++;
                j = i;
                if (count >= k) return true;
            }     
        }
        return false;
    }
}

image.png

目录
相关文章
|
机器学习/深度学习
【每日一题Day34】LC808分汤 | 动态规划 记忆化搜索
当我们把汤分配给某人之后,汤就没有了。每个回合,我们将从四种概率同为 0.25 的操作中进行分配选择。如果汤的剩余量不足以完成某次操作,我们将尽可能分配。当两种类型的汤都分配完时,停止操作。
75 0
|
9月前
【每日一题Day175】LC1147段式回文 | 贪心 +双指针
【每日一题Day175】LC1147段式回文 | 贪心 +双指针
56 0
|
9月前
2560. 打家劫舍 IV(二分)
2560. 打家劫舍 IV(二分)
|
9月前
【每日一题Day328】LC198打家劫舍 | 动态规划
【每日一题Day328】LC198打家劫舍 | 动态规划
61 0
|
9月前
【每日一题Day261】LC16最接近的三数之和 | 双指针
【每日一题Day261】LC16最接近的三数之和 | 双指针
48 0
|
9月前
【每日一题Day260】LC15三数之和 | 排序 + 双指针
【每日一题Day260】LC15三数之和 | 排序 + 双指针
68 0
|
9月前
【每日一题Day266】LC18四数之和 | 排序+双指针
【每日一题Day266】LC18四数之和 | 排序+双指针
51 1
|
9月前
|
人工智能 BI
【每日一题Day324】LC1462课程表 IV | BFS 拓扑排序 Floyd
【每日一题Day324】LC1462课程表 IV | BFS 拓扑排序 Floyd
38 0
|
9月前
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
69 1
|
存储
【每日一题Day58】LC1785构成特定和添加的最少元素 | 贪心
思路:首先统计数组nums的和sum,然后计算sum与goal的差target,我们需要向数组中添加最少的元素,使元素的和满足差值,元素的个数即为最终结果,因此每次添加的元素应尽可能最大。由于添加数值的绝对值大小受limit限制,因此添加元素的数值绝对值为limit的个数为Math.abs(target)/limit,如果Math.abs(target)不等于0,那么还需添加一个元素使和等于target
72 1

热门文章

最新文章