Leetcode 475.供暖气
供暖气
冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。
现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径。
所以,你的输入将会是房屋和供暖器的位置。你将输出供暖器的最小加热半径。
说明:
- 给出的房屋和供暖器的数目是非负数且不会超过 25000。
- 给出的房屋和供暖器的位置均是非负数且不会超过10^9。
- 只要房屋位于供暖器的半径内(包括在边缘上),它就可以得到供暖。
- 所有供暖器都遵循你的半径标准,加热的半径也一样。
示例 1:
输入: [1,2,3],[2]
输出: 1
解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。
示例 2:
输入: [1,2,3,4],[1,4]
输出: 1
解释: 在位置1, 4上有两个供暖器。我们需要将加热半径设为1,这样所有房屋就都能得到供暖。
首先第一步,i指向houses数组,j指向heaters数组。
在第一次的while过程中,所有比heater[j]小或等于的houses[i],显然都在heater[j]的左边,那么做差后可以得到距离,这个距离指的是——对每个houses[i]而言,距离右边最近的heaters的距离。
注意!一旦houses【i】 >= heaters[j],就说明已经加热器已经不再房子的右边了。因为,需要找到下一个加热器,因此j++。然后重复上一波操作即可。
在第二次的while中,几乎和上面一样的思路,但是是从后向前遍历。相当于又保存了距离——对于每个房子而言,距离左边最近的加热器的距离。
将左右的距离中选取一个最小的,就是针对每个房子而言最近的加热器距离。
因为加热器的具体在本题中是一致的,因为我们只要找到最大距离即可。
import java.util.Arrays;
class Solution {
public int findRadius(int[] houses, int[] heaters) {
Arrays.sort(houses);
Arrays.sort(heaters);
int i=0;
int j=0;
int[] right=new int[houses.length];
Arrays.fill(right,Integer.MAX_VALUE);
while(i<houses.length&&j<heaters.length){
if(houses[i]<=heaters[j]){
right[i]=heaters[j]-houses[i];
i++;
}else{
j++;
}
}
i=houses.length-1;
j=heaters.length-1;
int[] left=new int[houses.length];
Arrays.fill(left,Integer.MAX_VALUE);
while(i>=0&&j>=0){
if(houses[i]>=heaters[j]){
left[i]=houses[i]-heaters[j];
i--;
}else{
j--;
}
}
int[] res=new int[houses.length];
for(i=0;i<houses.length;i++){
res[i]=Math.min(right[i],left[i]);
}
int max=Integer.MIN_VALUE;
for(i=0;i<res.length;i++){
if(max<res[i]) max=res[i];
}
return max;
}
}
Leetcode 475.供暖气的更多相关文章
- Java实现 LeetCode 475 供暖器
475. 供暖器 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房 ...
- [Leetcode] Binary search -- 475. Heaters
Winter is coming! Your first job during the contest is to design a standard heater with fixed warm r ...
- 【leetcode】475. Heaters
problem 475. Heaters solution1: class Solution { public: int findRadius(vector<int>& house ...
- 【LeetCode】475. Heaters 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcod ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- 为什么说每个程序员都应该刷几道LeetCode?
2015年即将过去,最近在回顾和总结过去一年的工作经历,发现自己并不能算是一名合格的程序员. Google某前员工Lucida在文章<白板编程访谈——Why,What,How>当中写道: ...
- [LeetCode] Boom Enemy 炸弹人
Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero), return ...
- leetcode bugfree note
463. Island Perimeterhttps://leetcode.com/problems/island-perimeter/就是逐一遍历所有的cell,用分离的cell总的的边数减去重叠的 ...
- LeetCode 解题报告索引
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- COGS 147. [USACO Jan08] 架设电话线
★★☆ 输入文件:phoneline.in 输出文件:phoneline.out 简单对比时间限制:1 s 内存限制:16 MB Farmer John打算将电话线引到自己的农场,但电 ...
- UVA 12325 Zombie'sTreasureChest 宝箱 (分类枚举)
看上去非常像背包的问题,但是体积太大了. 线性规划的知识,枚举附近点就行了,优先选性价比高的, 宝物有两种体积为S0,价值V0,体积S1,价值V1. 枚举分以下几种: 1:枚举拿宝物1的数量,然后尽量 ...
- 香港城大:首创3D打印磁控微型机器人技术推动人体送药研究发展
香港城市大学研究团队全球首创由磁力推动.3D打印的微型机器人技术,能于生物体内精确地运载细胞到指定位置,预料可用作人体送药,为癌症治疗.细胞层面的治疗.再生医学等方面的应用,带来革命性改变. 近年,再 ...
- 查看numpy的类型
查看一个变量的类型:type(img) 查看array中的数据值的类型:img.dtype 查看array的形状:img.shape
- win7便笺元数据损坏,最新解决办法
Windows7系统开机时出现“部分便笺的元数据已被破坏,便笺已将其恢复为默认值.”问题,最新解决办法,图文说明,亲测,希望可以帮到大家 工具/原料 Windows7系统 InkObj.dll.T ...
- 01_5_删除指定id的单个对象
01_5_删除指定id的单个对象 1. 配置相应的映射文件内容 <delete id="deleteStudent" parameterClass="int&quo ...
- iOS 骰子战争 Dice Wars
占坑 这个游戏之前在网页端玩过,App Store 上没有搜到特别好的,想自己做个类似的iOS APP 游戏 目测实现难度适中,可玩性较高
- 代码方式使用AutoLayout (NSLayoutConstraint + Masonry)
随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫切和必要.(包括:iPhone4/4s,iPhone5/5s,iPhone6/6s,iPhone 6p/6ps ...
- NSRegularExpression 使用
需求: // 后台返回的某个实体 reminder = { cost = , type = , template = 可免费做某事{time}分钟,超过将按{cost}K元收费, time = } t ...
- Python学习记录4(语句)
赋值语句 序列解包 条件语句 语句块 布尔变量 条件执行和if语句 条件运算符 循环 while语句 for循环 迭代工具 跳出循环 break continue while truebreak语句 ...