163. Missing Ranges


June-19-2019

这傻逼题居然做了好久,动态维持lower bound,然后楞做。

重点在于edge case的处理。200 thump up, 1000+ thump down都是被edge case恶心的。。
一个是数组里可以有重复的。。
一个是边界,upper == nums[最后]的话, lower = temp + 1就变成INT最小值了。。所以不得不多加了个判断。用PYTHON是不是就没这个问题了,用JAVA导致各种被boundary恶心

    public List<String> findMissingRanges(int[] nums, int lower, int upper) { 
        List<String> result = new ArrayList<>();
        
        for (int i = 0; i < nums.length; i ++) {
            // srsly? duplicates?
            if (i != 0 && nums[i] == nums[i - 1]) continue;
            int temp = nums[i];
            if (temp == lower) {
            } else {
                if (temp - 1 == lower) {
                    result.add(lower + "");
                } else {
                    result.add(lower + "->" + (temp - 1));
                }
            }
            if (temp == upper) {
                // in case temp == Integer.MAX_VALUE which makes temp + 1 == Integer.MIN_VALUE
                return result;
            } else {
                lower = temp + 1;
            }
        }
        if (upper == lower) {
            result.add(upper + "");
        } else if (upper > lower) {
            result.add(lower + "->" + upper);
        }
        return result;
    }

选值如果通过 upper - lower = Rindex - Lindex来跳过段数,应该会减少很多时间。。

posted @ 2019-06-20 12:49  哇呀呀..生气啦~  阅读(183)  评论(0)    收藏  举报