力扣 774. 最小化去加油站的最大距离 二分答案
774. 最小化去加油站的最大距离
整数数组
stations
表示 水平数轴 上各个加油站的位置。给你一个整数k
。请你在数轴上增设
k
个加油站,新增加油站可以位于 水平数轴 上的任意位置,而不必放在整数位置上。设
penalty()
是:增设k
个新加油站后,相邻 两个加油站间的最大距离。请你返回
penalty()
可能的最小值。与实际答案误差在10-6
范围内的答案将被视作正确答案。示例 1:
输入:stations = [1,2,3,4,5,6,7,8,9,10], k = 9 输出:0.50000示例 2:
输入:stations = [23,24,36,39,46,56,57,65,84,98], k = 1 输出:14.00000提示:
10 <= stations.length <= 2000
0 <= stations[i] <= 10^8
stations
按 严格递增 顺序排列1 <= k <= 10^6
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimize-max-distance-to-gas-station
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
做题结果
成功,二分答案,大概 log(1e8)*2e3,合起来大概1e7。 写之前想过贪心,只在最大的元素中间插入加油站。但是如果一个距离中间需要插入多个加油站的情况,就不太好处理了。然后肯定要用到堆。但是用堆的话,和k的关系就比较大了。1e6的nlogn显然超了,不行。如果这题k值很小(1e5的话),就可以堆+贪心过了。
方法:二分答案
1. 最小值估算为0
2. 最大值估算为最大最小的差
3. 二分大概猜一下间距。
4. 两个加油站间距离超过间距的补加油站,如果提供的k个加油站能够补完所有空隙,使得任意两个相邻加油站间的距离小于目标则返回
class Solution {public double minmaxGasDist(int[] stations, int k) {int n = stations.length;double min = 0;double max = stations[n-1]-stations[0];while(min+(1.0/1e6)<max){double mid = (max-min)/2+min;if(check(stations,mid,k)){max = mid;}else{min = mid;}}return min;}private boolean check(int[] stations, double dis,int num){int n = stations.length;for(int i = 0; i < n-1&&num>=0; i++){num-=(int)((stations[i+1]-stations[i])/dis);}return num>=0;}}
力扣 774. 最小化去加油站的最大距离 二分答案相关推荐
- LeetCode 774. 最小化去加油站的最大距离(极小极大化 二分查找)
文章目录 1. 题目 2. 解题 1. 题目 假设我们在一条水平数轴上,列表 stations 来表示各个加油站的位置,加油站分别在 stations[0], stations[1], ..., st ...
- 力扣453.最小操作次数使数组元素相等
题目描述 给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1.找出让数组所有元素相等的最小操作次数. 示例 输入: [1,2,3] 输出: 3 解释 只需要3次操作(注 ...
- 力扣长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, -, numsr-1, numsr] ...
- leetcode力扣64. 最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5, ...
- 力扣 1723. 完成所有工作的最短时间 二分+回溯+剪枝/状压dp
https://leetcode-cn.com/problems/find-minimum-time-to-finish-all-jobs/ 思路一:显然最大工作时间满足单调性,所以可以用二分来写.但 ...
- LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)
文章目录 1. 题目 2. 解题 1. 题目 你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row ...
- 加油python_力扣——gas station (加油站) python实现
题目描述: 中文: 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] ...
- 当数字遇上奇思妙想:探究力扣“最小偶倍数”解题思路
本篇博客会讲解力扣"2413. 最小偶倍数"的解题思路,这是题目链接. 先来审题: 以下是输出示例: 以下是提示: 这道题最简单的思路是:奇数和2的最小公倍数是这个奇数的2倍,偶数 ...
- 力扣OJ 剑指 Offer(1-30)
目录 剑指 Offer 03. 数组中重复的数字 剑指 Offer 04. 二维数组中的查找 剑指 Offer 05. 替换空格 剑指 Offer 06. 从尾到头打印链表 剑指 Offer 07. ...
最新文章
- 在BSP的.bat文件下設置全局變量方法
- Unity_UIWidgets学习笔记03_组件_Container
- 文本分类入门(番外篇)特征选择与特征权重计算的区别
- Excel Chart
- python常用输入输出の方法
- 数据结构之散列表实现
- mysql ssl编译_MySQL8开启ssl加密
- php爬虫大数据抓取_数据分析|爬虫抓取东方财富网股吧帖子
- NodeMCU(ESP8266)使用UDP控制8x8点阵显示
- 如何使用dd工具进行磁盘读写性能测试
- win10系统如何去掉sd卡写保护
- xhEditor使用方法1
- 7. gdal进行遥感影像的16位转8位和百分比截断增强(看这篇就够了)
- 台式计算机无线接入,台式计算机有线连接路由器WiFi方法图步骤,可以详细设置无线内容(...
- pvr图片格式如何打开
- Android持久化存储——(包含操作SQLite数据库)
- VW适配方案后造成伪类使用content报错的解决办法 already has a 'content' property, give up to overwrite it.
- 关于github双因素验证问题解决方案
- Java游戏开发 —— 象棋
- 【指数编制系列一】指数分类、作用及基本编制流程
热门文章
- Adobe Photoshop 软件下载
- 校园网跑腿小程序源码 服务端+客户端+小程序
- 性能测试的环境以及测试数据构造
- UiPath MySql
- aws sqs java_AWS SQS Java.并非所有消息都从SQS队列中检索
- python pandas rename_Python3 pandas库(10) 修改列名和索引rename()
- Ubuntu能识别到外接显示器但外接显示器黑屏的解决方案
- 聚簇索引和非聚簇索引区别
- Vue虚拟DOM原理及面试题(笔记)
- KubeSphere 社区双周报 | KubeKey v3.0.7 发布 | 2023-02-03