Leetcode 475.供暖气

供暖气

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

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

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

说明:

  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中,几乎和上面一样的思路,但是是从后向前遍历。相当于又保存了距离——对于每个房子而言,距离左边最近的加热器的距离。

将左右的距离中选取一个最小的,就是针对每个房子而言最近的加热器距离。

因为加热器的具体在本题中是一致的,因为我们只要找到最大距离即可。

 1 import java.util.Arrays;
 2
 3 class Solution {
 4     public int findRadius(int[] houses, int[] heaters) {
 5         Arrays.sort(houses);
 6         Arrays.sort(heaters);
 7         int i=0;
 8         int j=0;
 9         int[] right=new int[houses.length];
10         Arrays.fill(right,Integer.MAX_VALUE);
11         while(i<houses.length&&j<heaters.length){
12             if(houses[i]<=heaters[j]){
13                 right[i]=heaters[j]-houses[i];
14                 i++;
15             }else{
16                 j++;
17             }
18         }
19         i=houses.length-1;
20         j=heaters.length-1;
21         int[] left=new int[houses.length];
22         Arrays.fill(left,Integer.MAX_VALUE);
23         while(i>=0&&j>=0){
24             if(houses[i]>=heaters[j]){
25                 left[i]=houses[i]-heaters[j];
26                 i--;
27             }else{
28                 j--;
29             }
30         }
31         int[] res=new int[houses.length];
32         for(i=0;i<houses.length;i++){
33             res[i]=Math.min(right[i],left[i]);
34         }
35         int max=Integer.MIN_VALUE;
36         for(i=0;i<res.length;i++){
37             if(max<res[i]) max=res[i];
38         }
39         return max;
40     }
41 }

原文地址:https://www.cnblogs.com/kexinxin/p/10280241.html

时间: 2024-10-18 07:05:05

Leetcode 475.供暖气的相关文章

leetcode 475. 供暖器(Heaters)

目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房屋和供暖器的位置.你将输出供暖器的最小加热半径. 说明: 给出的房屋和供暖器的数目是非负数且不会超过 25000. 给出的房屋和供暖器的位置均是非负数且不会超过109. 只要房屋位于供暖器的半径内(包括在边缘上),它就可以得到供暖. 所有供暖器都遵循你的半

LeetCode #475 Heaters

Question Winter is coming! Your first job during the contest is to design a standard heater with fixed warm radius to warm all the houses. Now, you are given positions of houses and heaters on a horizontal line, find out minimum radius of heaters so

LeetCode(1) Two Sum

题目: Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note t

leetcode第一刷_Word Ladder II

注:本文仅供技术探讨, 研究,测试使用. 这个漏洞是2014年2月4日被发现的, 因为该组件试用范围非常广, 所以该漏洞的影响也非常巨大.通过特制的包含畸形header的http请求,可以导致使用该组件的应用程序进入无限循环从而耗尽CPU等资源并最终崩溃. 最近因为在修补struts1的可操纵classLoader的漏洞(struts2也有该漏洞, 不在本文讨论范围), 所以我就在我建立的struts1的项目上直接做测试,怎么创建struts1的项目不在本文讨论范围之列你可以在这里下载strut

LeetCode题目总结分类

注:此分类仅供大概参考,没有精雕细琢.有不同意见欢迎评论~ 利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode.com/problems/longest-valid-parentheses/ (也可以用一维数组,贪心)http://oj.leetcode.com/problems/valid-parentheses/http://oj.leetcode.com/probl

LeetCode【2】. Add Two Numbers--java实现

第二道题 Add Two Numbers 如下:         You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.     Inpu

leetCode解题报告5道题(七)

先送上亚马逊传送门:<黑客与画家>:硅谷创业之父 Paul Graham 文集 再送上一个思维导图: 最好的办法就是自己创业或者加入创业公司 一个命题 命题 创业是一个压缩的过程,所有工作压缩成短短几年. 你不再是低强度的工作四十年,而是以极限强度工作四年 举例解释 一个优秀的黑客去除各种障碍,工作效率可以是在公司时的36倍. 假设他年薪8万美元,那么一个勤奋工作,摆脱杂事干扰的聪明黑客, 他的工作相当于年薪200万美元的价值 这里说的是极限情况,休闲时间为0,工作强度足以危害到健康. 守恒定

leetcode第一刷_Submission Details

有段时间没更新了,专心刷了几天,差十几道结束,决定把第一季更完,然后按照我的理解分类再分析一遍,第二遍的时候应该会按照问题分类,应该会引用第一季的,如果想到或找到更好的解法,会更新第一季. 链表的问题就是恶心,思路大多直接,对指针的操作要非常小心.我自己常犯的错误主要有: 1. 在取val或者取next时,没有判空,造成Runtime Error. 2. 空指针和只有一个节点之类的边界情况. 3. 更新链表之后,没有将链表尾部置空,造成它指向其他的节点,构成环,或者想拆下链表的一部分时没有把那部

leetcode题目思路以及部分解答(一)

为了进好公司这一个多月就得抽时间刷leetcode了..感觉这个OJ很不严谨...好多边界条件都没说清处..不过还好可以推测.唯一的好处就是不用自己编译调试,可以直接在网上显示出结果.当然,复杂一点的题目为了调试自己构建题目的结构也是很麻烦的...所以我发现提交里面错误好多.....再就是在笔记本上会时不时的变卡...每次提交都得等个3,4分钟才成功.要不就502错误... 我的题目按照通过率来.从通过率最高的题目开始讲解.每题不一定是最优解,都是我想得.仅供参考. 题目标题我都标好了.可以用c