供暖器
題目
冬季已經(jīng)來臨。 你的任務(wù)是設(shè)計(jì)一個(gè)有固定加熱半徑的供暖器向所有房屋供暖。
現(xiàn)在,給出位于一條水平線上的房屋和供暖器的位置,找到可以覆蓋所有房屋的最小加熱半徑。
所以,你的輸入將會(huì)是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑。
說明:
給出的房屋和供暖器的數(shù)目是非負(fù)數(shù)且不會(huì)超過 25000。
給出的房屋和供暖器的位置均是非負(fù)數(shù)且不會(huì)超過10^9。
只要房屋位于供暖器的半徑內(nèi)(包括在邊緣上),它就可以得到供暖。
所有供暖器都遵循你的半徑標(biāo)準(zhǔn),加熱的半徑也一樣。
示例 1:
輸入: [1,2,3],[2]
輸出: 1
解釋: 僅在位置2上有一個(gè)供暖器。如果我們將加熱半徑設(shè)為1,那么所有房屋就都能得到供暖。
示例 2:
輸入: [1,2,3,4],[1,4]
輸出: 1
解釋: 在位置1, 4上有兩個(gè)供暖器。我們需要將加熱半徑設(shè)為1,這樣所有房屋就都能得到供暖。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/heaters
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
思路
要找到合適的半徑,比較直觀的想法就是求出每個(gè)房屋對(duì)最近的供暖器的距離,找到其中最大的距離
.那首先需要排序,因?yàn)榉课菖c供暖器的距離只與最近的兩個(gè)取暖器有關(guān)系,所以使用貪心算法,每次比較前后兩個(gè)即可,最后留下最大的距離即可.
代碼
class Solution {
public int findRadius(int[] houses, int[] heaters) {
Arrays.sort(houses);
Arrays.sort(heaters);
int radius = -1;
int heaterIndex = 0;
for(int i = 0;i < houses.length;i++){
if((heaterIndex+1 < heaters.length) && (Math.abs(houses[i] - heaters[heaterIndex]) >= Math.abs(houses[i]-heaters[heaterIndex+1]))){
heaterIndex++;
i--;
}else{
if(radius < Math.abs(houses[i] - heaters[heaterIndex])){
radius = Math.abs(houses[i] - heaters[heaterIndex]);
}
}
}
return radius;
}
}