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. 最小化去加油站的最大距离 二分答案相关推荐

  1. LeetCode 774. 最小化去加油站的最大距离(极小极大化 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 假设我们在一条水平数轴上,列表 stations 来表示各个加油站的位置,加油站分别在 stations[0], stations[1], ..., st ...

  2. 力扣453.最小操作次数使数组元素相等

    题目描述 给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1.找出让数组所有元素相等的最小操作次数. 示例 输入: [1,2,3] 输出: 3 解释 只需要3次操作(注 ...

  3. 力扣长度最小的子数组

    给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, -, numsr-1, numsr] ...

  4. leetcode力扣64. 最小路径和

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [   [1,3,1],   [1,5, ...

  5. 力扣 1723. 完成所有工作的最短时间 二分+回溯+剪枝/状压dp

    https://leetcode-cn.com/problems/find-minimum-time-to-finish-all-jobs/ 思路一:显然最大工作时间满足单调性,所以可以用二分来写.但 ...

  6. LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row ...

  7. 加油python_力扣——gas station (加油站) python实现

    题目描述: 中文: 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] ...

  8. 当数字遇上奇思妙想:探究力扣“最小偶倍数”解题思路

    本篇博客会讲解力扣"2413. 最小偶倍数"的解题思路,这是题目链接. 先来审题: 以下是输出示例: 以下是提示: 这道题最简单的思路是:奇数和2的最小公倍数是这个奇数的2倍,偶数 ...

  9. 力扣OJ 剑指 Offer(1-30)

    目录 剑指 Offer 03. 数组中重复的数字 剑指 Offer 04. 二维数组中的查找 剑指 Offer 05. 替换空格 剑指 Offer 06. 从尾到头打印链表 剑指 Offer 07. ...

最新文章

  1. 在BSP的.bat文件下設置全局變量方法
  2. Unity_UIWidgets学习笔记03_组件_Container
  3. 文本分类入门(番外篇)特征选择与特征权重计算的区别
  4. Excel Chart
  5. python常用输入输出の方法
  6. 数据结构之散列表实现
  7. mysql ssl编译_MySQL8开启ssl加密
  8. php爬虫大数据抓取_数据分析|爬虫抓取东方财富网股吧帖子
  9. NodeMCU(ESP8266)使用UDP控制8x8点阵显示
  10. 如何使用dd工具进行磁盘读写性能测试
  11. win10系统如何去掉sd卡写保护
  12. xhEditor使用方法1
  13. 7. gdal进行遥感影像的16位转8位和百分比截断增强(看这篇就够了)
  14. 台式计算机无线接入,台式计算机有线连接路由器WiFi方法图步骤,可以详细设置无线内容(...
  15. pvr图片格式如何打开
  16. Android持久化存储——(包含操作SQLite数据库)
  17. VW适配方案后造成伪类使用content报错的解决办法 already has a 'content' property, give up to overwrite it.
  18. 关于github双因素验证问题解决方案
  19. Java游戏开发 —— 象棋
  20. 【指数编制系列一】指数分类、作用及基本编制流程

热门文章

  1. Adobe Photoshop 软件下载
  2. 校园网跑腿小程序源码 服务端+客户端+小程序
  3. 性能测试的环境以及测试数据构造
  4. UiPath MySql
  5. aws sqs java_AWS SQS Java.并非所有消息都从SQS队列中检索
  6. python pandas rename_Python3 pandas库(10) 修改列名和索引rename()
  7. Ubuntu能识别到外接显示器但外接显示器黑屏的解决方案
  8. 聚簇索引和非聚簇索引区别
  9. Vue虚拟DOM原理及面试题(笔记)
  10. KubeSphere 社区双周报 | KubeKey v3.0.7 发布 | 2023-02-03