LeetCode_二分搜索_中等_2560.打家劫舍 IV

目录

1.题目

沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。由于相邻的房屋装有相互连通的防盗系统,所以小偷不会窃取相邻的房屋。

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

给你一个整数数组 nums 表示每间房屋存放的现金金额。形式上,从左起第 i 间房屋中放有 numsi 美元。另给你一个整数 k ,表示窃贼将会窃取的最少房屋数。小偷总能窃取至少 k 间房屋。返回小偷的最小窃取能力。

示例 1:

输入:nums = 2,3,5,9, k = 2

输出:5

解释:

小偷窃取至少 2 间房屋,共有 3 种方式:

  • 窃取下标 0 和 2 处的房屋,窃取能力为 max(nums0, nums2) = 5 。
  • 窃取下标 0 和 3 处的房屋,窃取能力为 max(nums0, nums3) = 9 。
  • 窃取下标 1 和 3 处的房屋,窃取能力为 max(nums1, nums3) = 9 。
    因此,返回 min(5, 9, 9) = 5。

示例 2:

输入:nums = 2,7,9,3,1, k = 2

输出:2

解释:共有 7 种窃取方式。窃取能力最小的情况所对应的方式是窃取下标 0 和 4 处的房屋。返回 max(nums0, nums4) = 2 。

提示:

1 <= nums.length <= 105

1 <= numsi <= 109

1 <= k <= (nums.length + 1)/2

2.思路

(1)二分搜索

具体思路参考 875.爱吃香蕉的珂珂这篇文章。

相关题目:
LeetCode_动态规划_中等_198.打家劫舍
LeetCode_动态规划_中等_213.打家劫舍 II
LeetCode_动态规划_递归_二叉树_中等_337.打家劫舍 III
LeetCode_二分搜索_中等_875.爱吃香蕉的珂珂
LeetCode_二分搜索_中等_2594.修车的最少时间

3.代码实现(Java)

java 复制代码
//思路1------------二分搜索
class Solution {
    public int minCapability(int[] nums, int k) {
        int left = Arrays.stream(nums).min().getAsInt();
        int right = Arrays.stream(nums).max().getAsInt();
        while (left <= right) {
            int mid = left + (right - left) / 2;
            int cnt = getCnt(nums, mid);
            if (cnt < k) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return left;
    }

    //在最大金额 amount 的限制下,小偷可以偷取的最大房屋数目
    public int getCnt(int[] nums, int amount) {
        int cnt = 0;
        boolean visited = false;
        for (int num : nums) {
            if (num <= amount && !visited) {
                cnt++;
                visited = true;
            } else {
                visited = false;
            }
        }
        return cnt;
    }
}
相关推荐
想吃火锅100513 小时前
【leetcode】121.买卖股票的最佳时机js/c++
算法·leetcode·职场和发展
凌波粒15 小时前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
退休倒计时16 小时前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
小欣加油17 小时前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒17 小时前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode
凌波粒17 小时前
LeetCode--46.全排列(回溯算法)
数据结构·算法·leetcode
吃着火锅x唱着歌18 小时前
LeetCode 2530.执行K次操作后的最大分数
数据结构·算法·leetcode
sheeta199818 小时前
LeetCode 每日一题笔记 日期:2026.06.16 题目:3612. 字符串特殊符号处理
笔记·算法·leetcode
CoderYanger18 小时前
A.每日一题:2095. 删除链表的中间节点
java·数据结构·程序人生·leetcode·链表·面试·职场和发展
青山木18 小时前
Hot 100 --- 矩阵置零
线性代数·算法·leetcode·矩阵·哈希算法