https://leetcode.com/problems/missing-ranges/
Given a sorted integer array where the range of elements are [lower, upper] inclusive, return its missing ranges.
For example, given [0, 1, 3, 50, 75]
, lower = 0 and upper = 99, return ["2", "4->49", "51->74", "76->99"].
这道题因为已经说明了数组中的数都是这个范围,而且是排序好的,所以还比较简单。如果变形为不一定在给定范围内的话,就要先给数组排序,再binary search找到左右边界。
原题的代码如下:
public class Solution {
public List<String> findMissingRanges(int[] A, int lower, int upper) {
List<String> rst = new LinkedList<String>();
if(A==null || A.length==0){
addRange(rst, lower-1, upper+1);
return rst;
}
addRange(rst, lower-1, A[0]);
for(int i=1; i<A.length; i++){
addRange(rst, A[i-1], A[i]);
}
addRange(rst, A[A.length-1], upper+1);
return rst;
}
public void addRange(List<String> rst, int start, int end){
int dif = end-start;
if(dif==0 || dif==1) return;
if(dif == 2){
String tmp = Integer.toString(end-1);
rst.add(tmp);
return;
}
else{
String tmp = Integer.toString(start+1) + "->" + Integer.toString(end-1);
rst.add(tmp);
return;
}
}
}
注意,我的addRange函数是在结果list里面加上start和end范围内的String,但是这个范围不包括start和end,因此在需要包含start和end的时候,需要在调用函数的时候左边界减1或者右边界加1。