Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, upper], return its missing ranges.
Example:
Input: nums = [0, 1, 3, 50, 75], lower = 0 and upper = 99,
Output: [“2”, “4->49”, “51->74”, “76->99”]
注意审题,lower一定是小于等于nums[0]的,而upper是大于等于nums[n-1]的
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
List<String> res = new ArrayList<>();
StringBuilder sb = new StringBuilder();
if (nums.length == 0) {
if (lower == upper) sb.append(lower);
else sb.append(lower).append("->").append(upper);
res.add(sb.toString());
return res;
}
if (nums[0] != lower) {
if (lower + 1 == nums[0]) sb.append(lower);
else sb.append(lower).append("->").append((nums[0]-1));
res.add(sb.toString());
sb = new StringBuilder();
}
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] + 1 >= nums[i+1] || nums[i] == Integer.MAX_VALUE) {
continue;
} else {
if (nums[i] + 2 == nums[i+1])sb.append((nums[i]+1));
else sb.append((nums[i] + 1)).append("->").append((nums[i+1]-1));
res.add(sb.toString());
sb = new StringBuilder();
}
}
if (nums[nums.length - 1] != upper) {
if (nums[nums.length - 1]+1 == upper) sb.append(upper);
else sb.append((nums[nums.length - 1] + 1)).append("->").append(upper);
res.add(sb.toString());
}
return res;
}
优化版本:
public List<String> findMissingRanges(int[] n, int lo, int up){
List<String> re = new ArrayList<>();
for(int i = 0; i < n.length; i++) {
if(i != 0 && n[i] == n[i-1])continue;
if(n[i] == lo) {
lo++;
// if(lo < n[i])return re;
}else {
if(lo == n[i] -1)re.add(lo + "");
else re.add(lo+"->"+(n[i]-1));
lo = n[i]+1;
// if(lo < n[i])return re;
}
}
if(lo == up)re.add(lo + "");
else if(lo < up) re.add(lo+"->"+up);
return re;
}