163. Missing Ranges

解析LeetCode缺失区间问题
本文详细阐述了解决LeetCode中缺失区间问题的方法,通过分析示例数组与给定范围,实现高效查找并返回缺失的区间。代码示例包含边界条件处理及复杂度分析。

题目:

Given a sorted integer array where the range of elements are [lowerupper] 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"].

链接: http://leetcode.com/problems/missing-ranges/

题解:

查找丢失的range。这道题目主要注意一些边界条件。数组为空时要加入lower或者lower -> upper。不为空时可以先做一个特殊处理lower--,这样可以在变例数组的时候用条件getRangeAsString(lower + 1,nums[i] - 1)来把lower包括进来。遍历完毕数组之后要比较此时的lower以及upper,再尝试update list。

Time Complexity - O(n), Space Complexity - O(n)。

public class Solution {
    public List<String> findMissingRanges(int[] nums, int lower, int upper) {
        List<String> res = new ArrayList<>();
        if(nums == null)
            return res;
        if(nums.length == 0) {
            res.add(getRangeAsString(lower, upper));
            return res;
        }
        
        lower--;                                  //to include lower;
        for(int i = 0; i < nums.length; i++) {  
            if(nums[i] - lower >= 2)             // lower always <= nums[i]
                res.add(getRangeAsString(lower + 1, nums[i] - 1));
            lower = nums[i];
        }
        
        if(upper > lower)                        // boundary condition, include upper
            res.add(getRangeAsString(lower + 1, upper));
        
        return res;
    }
    
    private String getRangeAsString(int lower, int upper) {
        if(lower == upper)
            return String.valueOf(lower);
        StringBuilder sb = new StringBuilder();
        sb.append(lower);
        sb.append("->");
        sb.append(upper);
        return sb.toString();
    }
}

 

二刷:

方法跟一刷一样,但更新了一下边界条件的写法。也是建立了一个辅助方法来返回单个字符或者一个range。 遍历数组的时候,每次当num - lower >= 1时,我们进行结果集的添加操作,然后更新lower = num + 1。遍历完毕以后要再check一下 lower 和 upper的关系。

Java:

Time Complexity - O(n), Space Complexity - O(n)。

public class Solution {
    public List<String> findMissingRanges(int[] nums, int lower, int upper) {
        List<String> res = new ArrayList<>();
        if (nums == null || lower > upper) return res;
        for (int num : nums) {
            if (num - lower >= 1) res.add(getRangeString(lower, num - 1));
            lower = num + 1;
        }
        if (lower <= upper) res.add(getRangeString(lower, upper));
        return res;
    }
    
    private String getRangeString(int lower, int upper) {
        if (lower == upper) return String.valueOf(lower);
        StringBuilder sb = new StringBuilder();
        sb.append(lower).append("->").append(upper);
        return sb.toString();
    }
}

 

 

测试:

报错了 ❌ 解析失败: 30 validation errors for GraphData relationships -> 0 -> from_entity field required (type=value_error.missing) relationships -> 0 -> rel_type field required (type=value_error.missing) relationships -> 0 -> to_entity field required (type=value_error.missing) relationships -> 1 -> from_entity field required (type=value_error.missing) relationships -> 1 -> rel_type field required (type=value_error.missing) relationships -> 1 -> to_entity field required (type=value_error.missing) relationships -> 2 -> from_entity field required (type=value_error.missing) relationships -> 2 -> rel_type field required (type=value_error.missing) relationships -> 2 -> to_entity field required (type=value_error.missing) relationships -> 3 -> from_entity field required (type=value_error.missing) relationships -> 3 -> rel_type field required (type=value_error.missing) relationships -> 3 -> to_entity field required (type=value_error.missing) relationships -> 4 -> from_entity field required (type=value_error.missing) relationships -> 4 -> rel_type field required (type=value_error.missing) relationships -> 4 -> to_entity field required (type=value_error.missing) relationships -> 5 -> from_entity field required (type=value_error.missing) relationships -> 5 -> rel_type field required (type=value_error.missing) relationships -> 5 -> to_entity field required (type=value_error.missing) relationships -> 6 -> from_entity field required (type=value_error.missing) relationships -> 6 -> rel_type field required (type=value_error.missing) relationships -> 6 -> to_entity field required (type=value_error.missing) relationships -> 7 -> from_entity field required (type=value_error.missing) relationships -> 7 -> rel_type field required (type=value_error.missing) relationships -> 7 -> to_entity field required (type=value_error.missing) relationships -> 8 -> from_entity field required (type=value_error.missing) relationships -> 8 -> rel_type field required (type=value_error.missing) relationships -> 8 -> to_entity field required (type=value_error.missing) relationships -> 9 -> from_entity field required (type=value_error.missing) relationships -> 9 -> rel_type field required (type=value_error.missing) relationships -> 9 -> to_entity field required (type=value_error.missing)
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值