- Nested loop, time exceeded.
- Binary search.
- Note: whenever uses binary search, sort before search.
public class Solution {
public int findRadius(int[] houses, int[] heaters) {
if(houses == null || heaters == null || houses.length == 0 || heaters.length == 0){
return 0;
}
Arrays.sort(heaters);
int res = Integer.MIN_VALUE;
for(int house:houses){
int curMin = helper(house, heaters, 0, heaters.length-1, Integer.MAX_VALUE);
res = Math.max(curMin, res);
}
return res;
}
public int helper(int house, int[] heaters, int left, int right, int minVal){
if(left>right){
return minVal;
}
int mid = (left+right)/2;
if(house == heaters[mid]){
return 0;
} else if(house<heaters[mid]){
minVal = Math.min(minVal, heaters[mid] - house);
return helper(house, heaters, left, mid-1, minVal);
} else{
minVal = Math.min(minVal, house-heaters[mid]);
return helper(house, heaters, mid+1, right, minVal);
}
}
}