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;
    }
}
相关推荐
圣保罗的大教堂5 小时前
leetcode 3650. 边反转的最小路径总成本 中等
leetcode
木井巳7 小时前
【递归算法】验证二叉搜索树
java·算法·leetcode·深度优先·剪枝
We་ct8 小时前
LeetCode 30. 串联所有单词的子串:从暴力到高效,滑动窗口优化详解
前端·算法·leetcode·typescript
历程里程碑8 小时前
子串----和为K的子数组
大数据·python·算法·leetcode·elasticsearch·搜索引擎·哈希算法
YuTaoShao9 小时前
【LeetCode 每日一题】2976. 转换字符串的最小成本 I
算法·leetcode·职场和发展
我是咸鱼不闲呀11 小时前
力扣Hot100系列16(Java)——[堆]总结()
java·算法·leetcode
YuTaoShao12 小时前
【LeetCode 每日一题】2977. 转换字符串的最小成本 II——(解法一)记忆化搜索
算法·leetcode·职场和发展
希望有朝一日能如愿以偿12 小时前
力扣每日一题
数据结构·算法·leetcode
草履虫建模12 小时前
力扣算法分析 27.移除元素
java·开发语言·数据结构·后端·算法·leetcode·排序算法
im_AMBER12 小时前
Leetcode 109 链表的中间结点 | 删除链表的中间节点
数据结构·学习·算法·leetcode·链表