leetcode163 - Missing Ranges - medium

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”]

 

模拟法。
General case就是从序号1开始,每次拿出nums[i - 1]和nums[i]就可以得到有效区间了,即[nums[i-1] + 1, nums[I] - 1]。然后头尾也加一下即可。具体加的形式可以写个分离的小函数来处理, private void addRange(List<String> ans, long start, long end)。

细节:
1.小函数的传参用long不用int。因为有那个+1,-1的部分,如果nums[i]本身已经是Integer.MIN_VALUE了,如果用int来传入一个nums[i]-1那传的数就错了,函数里对start end的大小对比逻辑也就不对了。

 

实现:

    class Solution {
        public List<String> findMissingRanges(int[] nums, int lower, int upper) {

            List<String> ans = new ArrayList<>();
            if (nums == null || nums.length == 0) {
                addRange(ans, lower, upper);
                return ans;
            }

            addRange(ans, lower, (long) nums[0] - 1);
            for (int i = 1; i < nums.length; i++) {
                addRange(ans, (long) nums[i - 1] + 1, (long)nums[i] - 1);
            }
            addRange(ans, (long) nums[nums.length - 1] + 1, upper);

            return ans;
        }

        private void addRange(List<String> ans, long start, long end) {
            if (start > end) {
                return;
            } else if (start == end) {
                ans.add(String.valueOf(start));
            } else {
                ans.add(start + "->" + end);
            }
        }
    }

 

转载于:https://www.cnblogs.com/jasminemzy/p/9626565.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值