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

leecode2439 最小化数组中的最大值

在这里插入图片描述

这个题没有做出来,我太菜了。

我找不到这个查找的终止条件,即对这个数组进行操作,达到什么程度不能够获得比某个数更小的值了。

灵神的思路

灵神依旧是利用的开区间二分,最后这个right可以收敛到答案

先确定这个查找边界

int left = -1;
int right = 0;
for (int x : nums) {right = Math.max(right, x);
}

开区间二分

while (left + 1 < right) {int mid = (left + right) / 2;if (check(nums, mid)) {right = mid;} else {left = mid;}
}

check函数(最关键的地方)

灵神并没有对原始数组进行操作,而是设置了一个extra变量,这是最巧妙的地方

这个extra表示当前元素需要向右移动多少值才能够不超过limit。同时当前减少的,其实就是左边的一个元素增加的,所以是nums[i] + extra - limit,就这样若nums[i]>limit,去掉多余的 extra=nums[i]−limit 加到 nums[i−1] 上,不断的移动直到0,这个0的位置就是最大值,我们看看0能否达到这个mid,如果小于mid,索命这个mid太大了(我们找的是最小值),所以right=mid;

private boolean check(int[] nums, int limit) {long extra = 0;for (int i = nums.length - 1; i > 0; i--) {extra = Math.max(nums[i] + extra - limit, 0);}return nums[0] + extra <= limit;
}
http://www.dtcms.com/a/327399.html

相关文章:

  • 大数据中的数据压缩原理
  • 【解决apisix问题】
  • 快速了解词向量模型
  • RIOT、RT-Thread 和 FreeRTOS 是三种主流的实时操作系统
  • SpringMVC的原理及执行流程?
  • Bugku-CTF-web-留言板1
  • Linux网络--2.2、TCP接口
  • PMBT2907A,215 Nxp安世半导体 双极性晶体管 开关电源管理芯片
  • 蚁剑--安装、使用
  • C# 基于halcon的视觉工作流-章29-边缘提取-亚像素
  • 力扣.870优势洗牌解决方法: 下标排序​编辑力扣.942增减字符串匹配最长回文子序列牛客.背包问题(最大体积)力扣.45跳跃游戏II 另一种思考
  • 数据结构——线性表(核心操作,附代码)
  • vue项目封装axios请求,支持判断当前环境及判断token是否过期等等(详细教程,可复制粘贴代码)
  • cuda排序算法--双调排序(Bitonic_Sort)
  • 【数据库】 MySQL 表的操作详解
  • 蓝桥杯手算题和杂题简易做法
  • 《Auracast广播音频技术解析及未来路线图》 —蓝牙技术联盟 市场拓展经理 吴志豪 技术与市场经理 鲁公羽
  • 基于 DiT 大模型与字体级分割的视频字幕无痕擦除方案,助力短剧出海
  • 深度学习与遥感入门(六)|轻量化 MobileNetV2 高光谱分类
  • 4.7 GB 视频导致浏览器内存溢出(OOM)的解决方案
  • 从零部署Nacos:替代Eureka的服务注册与服务发现基础教程
  • 视频输入输出模块介绍和示例
  • Dubbo 3.x源码(33)—Dubbo Consumer接收服务调用响应
  • Python day42
  • tensorrt-llm0.20.0离线部署DeepSeek-R1-Distill-Qwen-32B
  • 第六十三章:AI模型的“跨界之旅”:不同硬件架构下的兼容性方案
  • Linux NAPI 实现机制深度解析
  • 【CDA 新一级】学习笔记第1篇:数据分析的时代背景
  • 【前端八股文面试题】【JavaScript篇7】什么是JavaScript的原型、原型链? 有什么特点
  • 【设计模式精解】Java实现责任链模式(职责链模式)优雅处理多级请求(概述,使用场景,优缺点,代码示例)