供暖气

冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。

现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径。

所以,你的输入将会是房屋和供暖器的位置。你将输出供暖器的最小加热半径。

说明:

  1. 给出的房屋和供暖器的数目是非负数且不会超过 25000。
  2. 给出的房屋和供暖器的位置均是非负数且不会超过10^9。
  3. 只要房屋位于供暖器的半径内(包括在边缘上),它就可以得到供暖。
  4. 所有供暖器都遵循你的半径标准,加热的半径也一样。

示例 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.供暖气的更多相关文章

  1. Java实现 LeetCode 475 供暖器

    475. 供暖器 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房 ...

  2. [Leetcode] Binary search -- 475. Heaters

    Winter is coming! Your first job during the contest is to design a standard heater with fixed warm r ...

  3. 【leetcode】475. Heaters

    problem 475. Heaters solution1: class Solution { public: int findRadius(vector<int>& house ...

  4. 【LeetCode】475. Heaters 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcod ...

  5. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  6. 为什么说每个程序员都应该刷几道LeetCode?

    2015年即将过去,最近在回顾和总结过去一年的工作经历,发现自己并不能算是一名合格的程序员. Google某前员工Lucida在文章<白板编程访谈——Why,What,How>当中写道: ...

  7. [LeetCode] Boom Enemy 炸弹人

    Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero), return ...

  8. leetcode bugfree note

    463. Island Perimeterhttps://leetcode.com/problems/island-perimeter/就是逐一遍历所有的cell,用分离的cell总的的边数减去重叠的 ...

  9. LeetCode 解题报告索引

    最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中......                        ...

随机推荐

  1. uvm_reg_backdoor——寄存器模型(十)

    寄存器有前门和后门两种访问方式,这儿只看后门访问方式 //----------------------------------------------------------------------- ...

  2. 工作方法-scrum+番茄工作法

    1.产品和开发团队近期的工作分析和安排,使用scrum. 产品的工作:通过product backlog来列出 开发团队近期的工作安排:通过sprint backlog来列出,由个人认领,并估算(优先 ...

  3. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] C A Weakness and Poorness (三分)

    显然f(x)是个凹函数,三分即可,计算方案的时候dp一下.eps取大了会挂精度,指定循环次数才是正解. #include<bits/stdc++.h> using namespace st ...

  4. Android(java)学习笔记127:生成 4种不同权限的文件

    1. 首先我们编写一个生成 4种 不同权限的文件的程序案例: (1)首先是activity_main.xml文件: <RelativeLayout xmlns:android="htt ...

  5. 爬虫2_python2

    # -*- coding: UTF-8 -*- # 正则表达式模块 import re # 获取路径模块 import urllib #时间模块 import time def getHtml(url ...

  6. servlet实现简单的反向代理

    项目基于Spring 须要的依赖为: <dependency> <groupId>org.mitre.dsmiley.httpproxy</groupId> < ...

  7. SQL学习总结笔记

    SQL语句的效率不仅是sql语句的设计还有一些其他的原因比如网络 .是否有视图.是否有索引等等.这里主要描述的是我个人对于sql设计方面优化的一些见解: 首先要说明一下的是数据库SQL解析顺序: (1 ...

  8. Unicode与ASCiI之间有什么区别?java当中的转义字符 Character类的使用 String类的使用

    ASCII码 称为 美国标准信息交换码 (American standard code of Information Interchange) 其中一共有多少个码?2的7次幂 128个 Unicode ...

  9. css文件和js文件后面带一个问号----2015-1103

    经常看一些网站页面源代码中的css文件和js文件后面带一个问号,后面跟着一连串数字或字符,这是干什么用的? 这个方法我也用过,而且很好用?,它的作用有两个:1.作为版本号,让自己方便记忆.查找:2.作 ...

  10. C++内存管理(effective c++ 04)

    阅读effective c++ 04 (30页) 提到的static对象和堆与栈对象.看了看侯老师的内存管理视频1~3.有点深. 了解一下. 目录 1 内存管理 1.1 C++内存管理详解 1.1.1 ...