参考资料:左神算法视频课
641 · Missing Ranges
Description
Given a sorted integer array where the range of elements are in the inclusive range [lower, upper], return its missing ranges.
Example 1
Input:
nums = [0, 1, 3, 50, 75], lower = 0 and upper = 99
Output:
[“2”, “4->49”, “51->74”, “76->99”]
Explanation:
in range[0,99],the missing range includes:range[2,2],range[4,49],range[51,74] and range[76,99]
Example 2
Input:
nums = [0, 1, 2, 3, 7], lower = 0 and upper = 7
Output:
[“4->6”]
Explanation:
in range[0,7],the missing range include r
思路:遍历数组的同时,更新lower.
注意:遍历到结束,lower如果小于等于upper, 这部分的missing range也要补充上。
public List<String> findMissingRanges(int[] nums,int lower,int upper)
{
List<String> res = new ArrayList<String>(); // 不能用LinkedList, 否则 有些测试用例会超时,我也不晓得为什么……
for(int i:nums)
{
if(lower<i)
{
res.add(miss(lower,i-1));
}
if(upper==i)
{
return res;
}
lower = i+1;
}
if(lower<=upper)
{
res.add(miss(lower,upper));
}
return res;
}
public String miss(int l,int r)
{
String left = String.valueOf(l);
if(l<r)
{
return left+"->"+String.valueOf(r);
}else{
return left;
}
}
或者这么写
public class Solution {
/**
* @param nums: a sorted integer array
* @param lower: An integer
* @param upper: An integer
* @return: a list of its missing ranges
*/
// public List<String> f(int[] nums, int lower, int upper) {
// // write your code here
// }
public List<String> findMissingRanges(int[] nums,int lower,int upper)
{
List<String> res = new ArrayList<>();
for(int i:nums)
{
if(lower<i)
{
res.add(miss(lower,i-1));
}
if(upper==i)
{
return res;
}
lower = i+1;
}// end for
if(lower<=upper)// !! say, given nums=[], lower=1, upper=1, ans should be ["1"].
{
res.add(miss(lower,upper));
}
return res;
}
public String miss(int l, int r)
{
String left = String.valueOf(l);
String right = "";
if(l<r)
{
right = "->"+String.valueOf(r);
}
return left+right;
}
}