【算法题】2560. 打家劫舍 IV

【算法题】2560. 打家劫舍 IV

首页休闲益智打家劫舍更新时间:2024-05-09
题目:

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

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

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

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

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

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

示例 1:

输入:nums = [2,3,5,9], k = 2
输出:5
解释:
小偷窃取至少 2 间房屋,共有 3 种方式:

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

提示:

1 <= nums.length <= 10^5
1 <= nums[i] <= 10^9
1 <= k <= (nums.length 1)/2

java 代码:

class Solution { public int minCapability(int[] nums, int k) { int left = 0, right = (int) 1e9; while (left 1 < right) { int mid = (left right) >>> 1; int f0 = 0, f1 = 0; for (int x : nums) if (x > mid) f0 = f1; else { int tmp = f1; f1 = Math.max(f1, f0 1); f0 = tmp; } if (f1 >= k) right = mid; else left = mid; } return right; } }

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved