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

目录

1.题目

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

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

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

示例 1:

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

输出:5

解释:

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

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

示例 2:

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

输出:2

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

提示:

1 <= nums.length <= 105

1 <= nums[i] <= 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;
    }
}
相关推荐
爱爬山的老虎16 小时前
【面试经典150题】LeetCode121·买卖股票最佳时机
数据结构·算法·leetcode·面试·职场和发展
雾月5517 小时前
LeetCode 914 卡牌分组
java·开发语言·算法·leetcode·职场和发展
想跑步的小弱鸡17 小时前
Leetcode hot 100(day 4)
算法·leetcode·职场和发展
Fantasydg17 小时前
DAY 35 leetcode 202--哈希表.快乐数
算法·leetcode·散列表
jyyyx的算法博客17 小时前
Leetcode 2337 -- 双指针 | 脑筋急转弯
算法·leetcode
ゞ 正在缓冲99%…17 小时前
leetcode76.最小覆盖子串
java·算法·leetcode·字符串·双指针·滑动窗口
惊鸿.Jh18 小时前
【滑动窗口】3254. 长度为 K 的子数组的能量值 I
数据结构·算法·leetcode
想跑步的小弱鸡1 天前
Leetcode hot 100(day 3)
算法·leetcode·职场和发展
SsummerC1 天前
【leetcode100】每日温度
数据结构·python·leetcode
Swift社区1 天前
Swift LeetCode 246 题解:中心对称数(Strobogrammatic Number)
开发语言·leetcode·swift