【leetCode】missing range

参考资料:左神算法视频课

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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值