当前位置: 首页 > news >正文

【每日一题Day331】LC2560打家劫舍 IV | 二分查找 + 贪心

打家劫舍 IV【LC2560】

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

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

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

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

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

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

  • 思路:最小化最大值->二分查找

    • 明确题意:求取至少偷k不相邻的房屋时,小偷的 最小 窃取能力,即最小化偷取房屋金额的最大值。
    • 寻找单调性(二段性):偷取能力 y y y增加(能偷取的房屋的金额必须小于等于 y y y),能偷取不相邻房屋数目增加,因此一定存在一个分割点 y y y,使得
      • 小于y的值,能够偷取的房屋数目 c o u n t count count必然不满足 c o u n t ≥ k count \ge k countk
      • 大于等于y的值,能够偷取的房屋数目 c o u n t count count必然满足 t o t a l ≥ k total \ge k totalk
    • 二分答案:因此当偷取房屋数目至少为 k k k时,寻找最大偷取数目的最小值 y y y,可以通过二分查找的方法找到最终的 y y y,二分查找的下限为min(nums),上限为max(nums)
    • check函数:
      • 统计最大偷取数目为 y y y时,能够偷取的房屋数目,是否大于 k k k,大于则返回true
      • 由于不能偷取相邻房屋,因此需要记录上一个偷取的房屋编号
  • 实现

    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;}}
    
    • 复杂度
      • 时间复杂度: O ( n log ⁡ C ) O(n\log C) O(nlogC) n n n是数组的长度,C是二分的范围,即数组中最最大和最小值的差值。二分查找的时间复杂度是 O ( log ⁡ C ) O(\log C) O(logC),每次二分查找需要判断是否符合条件的时间复杂度为 O ( n ) O(n) O(n),因此总的时间复杂度为 O ( n l o g ( n c ) ) O(nlog(nc)) O(nlog(nc))
      • 空间复杂度: O ( 1 ) O(1) O(1)

相关文章:

【每日一题Day331】LC2560打家劫舍 IV | 二分查找 + 贪心

打家劫舍 IV【LC2560】 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统&#xff0c;所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额…...

JVM 参数详解

GC有两种类型&#xff1a;Scavenge GC 和Full GC 1、Scavenge GC 一般情况下&#xff0c;当新对象生成&#xff0c;并且在Eden申请空间失败时&#xff0c;就会触发Scavenge GC&#xff0c;堆的Eden区域进行GC&#xff0c;清除非存活对象&#xff0c;并且把尚且存活的对象移动到…...

uni-app获取地理位置

在uni-app中&#xff0c;可以通过uni.getLocation()方法获取地理位置。具体步骤如下&#xff1a; 在uni-app项目中的manifest.json文件中&#xff0c;添加需要获取地理位置的权限&#xff1a; {"mp-weixin": {"appid": "...","permission…...

Learn Prompt-Prompt 高级技巧:思维链 Chain of Thought Prompting

Jason Wei等作者对思维链的定义是一系列的中间推理步骤&#xff08; a series of intermediate reasoning steps &#xff09;。目的是为了提高大型语言模型&#xff08;LLM&#xff09;进行复杂推理的能力。 思维链通常是伴随着算术&#xff0c;常识和符号推理等复杂推理任务出…...

Vim编辑器使用入门

目录 一、Vim 编辑器基础操作 二、Vim 编辑器进阶操作 三、Vim 编辑器高级操作 四、Vim 编辑器文件操作 五、Vim 编辑器文件管理 六、Vim 编辑器进阶技巧 七、Vim 编辑器增强功能 Vim的三种工作模式 一、Vim 编辑器基础操作 1.移动光标 - 光标的移动控制 移动光标有两…...

早餐与风景

来吧&#xff0c;我用流水账描述下这一天。 时维九月&#xff0c;北京的早上有点冷&#xff0c;因为今天有个市场活动要去支撑&#xff0c;按照会议时间的要求&#xff0c;我需要在早上7点半就赶到会场&#xff0c;所以昨天晚上我加班到凌晨处理完了今天要给出去的材料&#xf…...

常用python代码串

记录新疆出差期间的一些代码 打开yaml文件python中的专有名词ctrlc 打开yaml文件 with open(/home/cyun/文档/cotton_ws/src/control/scripts/ControlParameter.yaml, r) as file:yaml_data yaml.load(file, Loaderyaml.FullLoader)后面发现像这种打开文件的最好是try一下 p…...

电脑桌面透明便签软件是哪个?

在现代快节奏的工作环境中&#xff0c;许多上班族都希望能够在电脑桌面上方便地记录工作资料、重要事项、工作流程等内容。为了解决这个问题&#xff0c;一款优秀的电脑桌面便签软件是必不可少的。在选择桌面便签软件时&#xff0c;许多用户也希望便签软件能够与电脑桌面壁纸相…...

Git创建干净分支,本地操作不依赖任何分支

clone远程项目: git clone gittest.git查看分支: git branch -a创建新分支: git checkout --orphan test, 返回Switched to a new branch test删除当前项目文件夹下所有文件: git rm -rf .提交变更: git commit -m "new branch for test"查看分支: git branch -a, 发…...

sqlmap tamper脚本编写

文章目录 tamper脚本是什么&#xff1f;指定tamper脚本运行sqlmap安全狗绕过tamper脚本 tamper脚本是什么&#xff1f; SQLMap 是一款SQL注入神器&#xff0c;可以通过tamper 对注入payload 进行编码和变形&#xff0c;以达到绕过某些限制的目的。但是有些时候&#xff0c;SQLM…...

5.5V-65V Vin同步降压控制器,具有线路前馈SCT82630DHKR

描述&#xff1a; SCT82630是一款65V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输…...

YOLOv5、YOLOv8改进:Decoupled Head解耦头

目录 1.Decoupled Head介绍 2.Yolov5加入Decoupled_Detect 2.1 DecoupledHead加入common.py中&#xff1a; 2.2 Decoupled_Detect加入yolo.py中&#xff1a; 2.3修改yolov5s_decoupled.yaml 1.Decoupled Head介绍 Decoupled Head是一种图像分割任务中常用的网络结构&#…...

Prometheus+Grafana可视化监控【Redis状态】

文章目录 一、安装Docker二、安装Redis数据库(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装redis_exporter七、Grafana添加Redis监控模板 一、安装Docker 注意&#xff1a;我这里使用之前写好脚本进行安装Docker&#xff0c;如果已…...

怒刷LeetCode的第6天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;哈希表 方法二&#xff1a;逐个判断字符 方法三&#xff1a;模拟减法 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;水平扫描法 方法二&#xff1a;垂直扫描法 方法三&#xff1a;分治法 方…...

SSL双向认证-Nginx配置

SSL双向认证需要CA证书&#xff0c;开发过程可以利用自签CA证书进行调试验证。 自签CA证书生成过程&#xff1a;SSL双向认证-自签CA证书生成 Nginx配置适用于前端项目或前后端都通过Nginx转发的时候&#xff08;此时可不配置后端启用双向认证&#xff09; 1.Nginx配置&#…...

GO学习之 远程过程调用(RPC)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...

八大排序(四)--------直接插入排序

本专栏内容为&#xff1a;八大排序汇总 通过本专栏的深入学习&#xff0c;你可以了解并掌握八大排序以及相关的排序算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;八大排序汇总 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库…...

MYSQL--存储引擎和日志管理

存储引擎&#xff1a; 一、存储引擎概念&#xff1a; MySQL中的数据用各种不同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎。存储引擎是My…...

VUE之更换背景颜色

1. 确定需求 在实现之前&#xff0c;首先需要明确需求&#xff0c;即用户可以通过某种方式更改页面背景颜色&#xff0c;所以我们需要提供一个可操作的控件来实现此功能。 2. 创建Vue组件 为了实现页面背景颜色更换功能&#xff0c;我们可以创建一个Vue组件。下面是一个简单…...

大型集团借力泛微搭建语言汇率时区统一、业务协同的国际化OA系统

国际化、全球化集团&#xff0c;业务遍布全世界&#xff0c;下属公司众多&#xff0c;集团对管理方式和企业文化塑造有着很高的要求。不少大型集团以数字化方式助力全球统一办公&#xff0c;深化企业统一管理。 面对大型集团全球化的管理诉求&#xff0c;数字化办公系统作为集…...

Quartz 建表语句SQL文件

SQL文件在jar里面&#xff0c;github下载 https://github.com/quartz-scheduler/quartz/releases/tag/v2.3.2 解压&#xff0c;sql文件路径&#xff1a;quartz-core\src\main\resources\org\quartz\impl\jdbcjobstore tables_mysql_innodb.sql # # In your Quartz propertie…...

nginx SseEmitter 长连接

1、问题还原&#xff1a; 在做openai机器人时&#xff0c;后台使用 SseEmitterEventSource 实现流式获取数据&#xff0c;前端通过 EventSourcePolyfill 函数接收后端的数据&#xff0c;在页面流式输出到页面&#xff0c;做成逐字打稿的效果。本地测试后&#xff0c;可以正常获…...

若依cloud -【 100 ~ 】

100 分布式日志介绍 | RuoYi 分布式日志就相当于把日志存储在不同的设备上面。比如若依项目中有ruoyi-modules-file、ruoyi-modules-gen、ruoyi-modules-job、ruoyi-modules-system四个应用&#xff0c;每个应用都部署在单独的一台机器里边&#xff0c;应用对应的日志的也单独存…...

VPN协议是如何工作的

VPN&#xff0c;全名 Virtual Private Network&#xff0c;虚拟专用网&#xff0c;就是利用开放的公众网络&#xff0c;建立专用数据传输通道&#xff0c;将远程的分支机构、移动办公人员等连接起来。 VPN 通过隧道技术在公众网络上仿真一条点到点的专线&#xff0c;是通过利用…...

c++::作用域符解析

1&#xff09;当存在具有相同名称的局部变量时&#xff0c;要访问全局变量 2&#xff09;在类之外定义函数。 class A { } void A::func(){ }A a;a.func();3&#xff09;访问一个类的静态变量 class A { static int b; } A::b; 4) 如果两个命名空间中都存在一个具有相同名称的类…...

【电源专题】什么是充电芯片的Shipping Mode(船运模式)

现在越来越多电子产品小型化,手持化,这样就需要电池来为产品供电。但电池供电造成的另一个难题就是产品的续航能力的强与弱。 如果想提升续航能力,有一种方法是提高电池容量。如果电池体积没有变化的情况下,可能使用了新型材料、高级技术来增加电池容量,但这势必会增加电池…...

WebGL笔记: 2D和WebGL坐标系对比和不同的画图方式, 程序对象通信,顶点着色器,片元着色器

WebGL 坐标系 canvas2d画布和webgl画布使用的坐标系都是二维直角坐标系&#xff0c;但它们坐标原点、y 轴的坐标方向&#xff0c;坐标基底都不一样canvas2d 坐标系的原点在左上角, x轴朝右&#xff0c;y轴朝下1个单位的宽就是一个像素的宽&#xff0c;1个单位的高就是一个像素…...

【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码

冒泡排序原理 每次比较两个相邻的元素&#xff0c;将较大的元素交换至右端 冒泡排序执行过程输出效果 冒泡排序实现思路 每次冒泡排序操作都会将相邻的两个元素进行比较&#xff0c;看是否满足大小关系要求&#xff0c;如果不满足&#xff0c;就交换这两个相邻元素的次序&…...

多模块和分布式项目

一、什么是多模块项目 多模块项目是一种软件项目组织结构&#xff0c;其中一个大型项目被分成多个独立的子模块或子项目。每个子模块通常具有自己的功能、目录结构和开发周期&#xff0c;但它们可以协同工作以构建一个完整的应用程序。这种项目结构有助于提高代码的可维护性、…...

AI视频剪辑:批量智剪技巧大揭秘

对于许多内容创作者来说&#xff0c;视频剪辑是一项必不可少的技能。然而&#xff0c;传统的视频剪辑方法需要耗费大量的时间和精力。如今&#xff0c;有一种全新的剪辑方式正在改变这一现状&#xff0c;那就是批量AI智剪。这种智能化的剪辑方式能够让你在短时间内轻松剪辑大量…...

中企动力科技股份有限公司销售/互联网优化

1. Class类的使用 1.1 class的获取有三种方式 F fnew F();//方法一 任何一个类都有一个隐含的静态成员变量classClass c1F.class;//方法二 已经知道该类的对象通过getClass方法Class c2f.getClass();System.out.println(c1c2); //true//方法三 Class.forName()方…...

郑州营销型网站制作教程/广安seo外包

目录导入sql文件navicat中直接导入mysql shell中导入linux shell中导入导出sql文件navicat导出sql文件linux shell中导入sql文件导入sql文件 一份写好的sql文件&#xff0c;包括建表语句和执行语句 navicat中直接导入 导入成功 mysql shell中导入 将 .sql文件放入xshell目…...

辽宁城乡建设部网站首页/推销产品的软文500字

StringBuilder和StringBuffer是可变字符序列 区别&#xff1a; StringBuilder的线程不安全&#xff0c;但是效率高。 StringBuffer的线程安全&#xff0c;但是效率低。 StringBuilder&#xff1a; StringBuilder sb new StringBuilder(); //这里初始化一个默认长度16的char数组…...

手机微信官方网站/独立站seo实操

文章目录一、 关于需求分析与建模的读书心得1) 我对需求分析与建模的认识与建议1. 需求问题是当前软件开发面临的主要问题2. 需求问题具体原因分析3. 需求工程的重要性4. 需求工程的复杂性2) 我对需求分析与建模的读书心得1. 我对需求分析与建模的读书心得二、 关键词查找结合小…...

做网站什么分类流量多/西安seo王尘宇

axios用多了就开始疑惑它里面到底是个啥&#xff0c;虽然总被告知它就是基于ajax的封装&#xff0c;但掐指一算&#xff0c;事情应该没这么简单&#xff0c;于是开始深挖&#xff0c;挖着挖着就挖到了Promise。毕竟axios的官方描述是这样的&#xff1a;Promise based HTTP clie…...

网站建设新疆/网站如何做推广

257. 二叉树的所有路径 - 力扣&#xff08;LeetCode&#xff09; 回溯法枚举&#xff0c;或者dfs就可以&#xff1a; class Solution { public:vector<string> res;string t "->";void backtrack(TreeNode* root, string s){if(!root->left &&…...