-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path475_javascript.js
57 lines (50 loc) · 2.11 KB
/
475_javascript.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// 冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。
// 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径。
// 所以,你的输入将会是房屋和供暖器的位置。你将输出供暖器的最小加热半径。
// 说明:
// 给出的房屋和供暖器的数目是非负数且不会超过 25000。
// 给出的房屋和供暖器的位置均是非负数且不会超过10^9。
// 只要房屋位于供暖器的半径内(包括在边缘上),它就可以得到供暖。
// 所有供暖器都遵循你的半径标准,加热的半径也一样。
// 示例 1:
// 输入: [1,2,3],[2]
// 输出: 1
// 解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。
// 示例 2:
// 输入: [1,2,3,4],[1,4]
// 输出: 1
// 解释: 在位置1, 4上有两个供暖器。我们需要将加热半径设为1,这样所有房屋就都能得到供暖。
/**
* @param {number[]} houses
* @param {number[]} heaters
* @return {number}
*/
var findRadius = function(houses, heaters) {
let returnMax = 0;
// 排序 题干中未说明是已排序好的数组
heaters.sort(function(val1,val2){
return val1 - val2;
})
houses.sort(function(val1,val2){
return val1 - val2;
})
for(let i=0;i <houses.length; i++){
let left = 0,right = heaters.length-1;
// left < right-1 ***
while(left < right -1){
let middle = left + Math.floor((right-left)/2);
if(houses[i] < heaters[middle]){
// right = middle *** right = middle -1
right = middle;
}else if(houses[i] > heaters[middle]){
// left = middle *** left = middle +1
left = middle
}else {
left = right = middle;
}
}
let max = Math.min(Math.abs(houses[i] - heaters[left]),Math.abs(houses[i] - heaters[right]));
returnMax = Math.max(returnMax,max)
}
return returnMax;
};