leetCode每日一题js--01供暖器
供暖器
题目:
在加热器的加热半径范围内的每个房屋都可以获得供暖。
现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。
说明:所有供暖器都遵循你的半径标准,加热的半径也一样。
示例 1:
输入: houses = [1,2,3], heaters = [2]
输出: 1
解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。
示例 2:
输入: houses = [1,2,3,4], heaters = [1,4]
输出: 1
解释: 在位置1, 4上有两个供暖器。我们需要将加热半径设为1,这样所有房屋就都能得到供暖。
示例 3:
输入:houses = [1,5], heaters = [2]
输出:3
问题转化:
一个房屋需要的供暖器的最小加热半径 = 离该房屋最近的供暖器
max{每个房屋需要的供暖器的最小加热半径}=可以覆盖所有房屋的最小加热半径。
如何计算离该房屋最近的供暖器?
解题思路:
思路一:暴力求解
每个房屋都去遍历供暖器,计算自己与供暖器的距离,保存最小值存起来。
在所有的房屋的距离中找最小值。
复杂度很高,O(m*n)
思路二:不要遍历查找,要二分查找
m*log(n)+nlog(n)[数组排序]
复杂度O((m+n)*log(n))
二分查找:先排序,再二分查找,找到最小的距离,然后记录下来。
思路三:二分查找的边界值很难确定,因此可以使用双指针,思路清晰。
对于每个房屋:
当前房间有供暖器,这是我们就选当前位置为0
右边最近:
heaters[i] - house
左边最近:
house - heaters[i]
特殊情况:房子左边没有暖气,(即房子位于最左边);右边没暖气。
将房子和暖气都进行排序。
对于每个房子:i
指针用于遍历房子
找最小距离,就是指针 j
在暖气上移动,移到大于房子的暖气(在房子右边)则停下,这是离房子最近的右边的暖气
指针j -1
:就是左边的离房子最近的暖气。
对于房子i
:d = min (house[i]-heaters[j],house[i]-heaters[j-1])
var findRadius = function(houses, heaters) {// 将房子和暖气都进行排序。houses.sort((a, b) => a - b);heaters.sort((a, b) => a - b);let ans = 0;for (let i = 0, j = 0; i < houses.length; i++) {while (j < heaters.length && heaters[j] < houses[i]){j++;}let curDistance = Math.abs(houses[i] - heaters[j]);if(j === 0){curDistance = heaters[0]-houses[i] ;}else if(j === heaters.length){curDistance = houses[i]-heaters[heaters.length-1];}else {curDistance = Math.min(Math.abs(houses[i] - heaters[j-1]), Math.abs(houses[i] - heaters[j]));}ans = Math.max(ans, curDistance);}return ans;
};
细节优化处理:提交了两次,一次打败80%,一次打败94%。
优化的点在于 将length 赋给一个变量,这样就只需要计算一次数组的长度。
/*** @param {number[]} houses* @param {number[]} heaters* @return {number}*/
var findRadius = function(houses, heaters) {// 将房子和暖气都进行排序。houses.sort((a, b) => a - b);heaters.sort((a, b) => a - b);let ans = 0;for (let i = 0, j = 0; i < houses.length; i++) {while (j < heaters.length && heaters[j] < houses[i]){j++;}let curDistance = Math.abs(houses[i] - heaters[j]);// let len = heaters.length;if(j === 0){curDistance = heaters[0]-houses[i] ;}else if(j === len){curDistance = houses[i]- heaters[len-1];}else {curDistance = Math.min(Math.abs(houses[i] - heaters[j-1]), curDistance);}ans = Math.max(ans, curDistance);}return ans;
};
leetCode每日一题js--01供暖器相关推荐
- 830. Positions of Large Groups(Leetcode每日一题-2021.01.05)
Problem In a string s of lowercase letters, these letters form consecutive groups of the same charac ...
- leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树
leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...
- LeetCode每日一题——1758. 生成交替二进制字符串的最少操作数
LeetCode每日一题系列 题目:1758. 生成交替二进制字符串的最少操作数 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个仅由字符 '0' 和 '1' ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...
- 【LeetCode每日一题】——109.有序链表转换二叉搜索树
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...
- leetcode每日一题·救生艇问题(Python)
leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...
最新文章
- boost::transform_iterator用法的测试程序
- 【今晚7点半】:GVoice 千万在线语音传输的那些事
- C++ STL string与算法
- 在startup中遍历程序集
- Ioc容器beanDefinition-Spring 源码系列(1)
- 了解更多关于11gR2 diskmon
- Java学习(16-20天, 线性数据结构)
- 首次面试凭借Java面试通关宝典,成功逆袭拿下美团offer
- 怎样解决CMD命令行窗口中文乱码问题
- Pycharm通过ssh远程连接服务器
- 服务器虚拟机声卡无法加载,Esxi虚拟机添加声卡
- 20000本当当豆瓣畅销书电子书免费领取,免费送
- python中tab键_python中tab键指的是什么意思
- Nginx网页优化(版本、缓存时间、日志分隔、连接超时)
- 基于python的论文摘要怎么写_Django显示文章摘要需要如何写
- html表格线条不显示,cline处理表格不显示线条
- AI人工智能机器人教室方案(含全套配置)
- android 图片热点区域,Android开发之扫描附近wifi热点并列表显示
- Python Diary - Day 15 模块、异常和文件
- 5G支持下,人工智能除了AI换脸,还能干什么?