【每日一题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

目录
相关文章
|
7月前
【每日一题Day266】LC18四数之和 | 排序+双指针
【每日一题Day266】LC18四数之和 | 排序+双指针
44 1
|
7月前
【每日一题Day175】LC1147段式回文 | 贪心 +双指针
【每日一题Day175】LC1147段式回文 | 贪心 +双指针
49 0
|
7月前
【每日一题Day242】LC1262可被三整除的最大和 | 贪心 dp
【每日一题Day242】LC1262可被三整除的最大和 | 贪心 dp
54 0
|
7月前
【每日一题Day149】LC2389和有限的最长子序列 | 贪心+前缀和+二分查找
【每日一题Day149】LC2389和有限的最长子序列 | 贪心+前缀和+二分查找
48 0
|
7月前
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
59 0
|
7月前
2560. 打家劫舍 IV(二分)
2560. 打家劫舍 IV(二分)
|
7月前
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
58 1
|
7月前
|
机器学习/深度学习
【每日一题Day271】LC918环形子数组的最大和 | 分类讨论 + dp
【每日一题Day271】LC918环形子数组的最大和 | 分类讨论 + dp
62 0
【每日一题Day271】LC918环形子数组的最大和 | 分类讨论 + dp
|
7月前
【每日一题Day328】LC198打家劫舍 | 动态规划
【每日一题Day328】LC198打家劫舍 | 动态规划
55 0
|
7月前
【每日一题Day261】LC16最接近的三数之和 | 双指针
【每日一题Day261】LC16最接近的三数之和 | 双指针
41 0