博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode] Missing Ranges 缺失区间
阅读量:7043 次
发布时间:2019-06-28

本文共 1541 字,大约阅读时间需要 5 分钟。

Missing Ranges

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

双指针遍历

复杂度

时间 O(N) 空间 O(1)

思路

我们用一个指针prev记录上次range的结尾,一个指针curr记录当前遍历到的数字,如果curr和prev相差大于1,说明一个missing range,我们将其加入结果列表中就行了。这题主要是有几个corner case要解决:

  1. 如何处理lower到第一个数,和最后一个数到upper的missing range?

  2. 如何区分range中只有一个数和多个数?

  3. 如何有效的得到missing range的起始和结束值,同时保证不会包含数组中的数字?

对于第一个问题,我们要做的就是在让for循环多判断两次。想象一下假设数组前有一段连续的负无穷到lower-1,数组后有一段upper+1到正无穷,这样是等价与上下界的。本来如果不考虑头尾,那for循环本应是从1到length-1的,但是为了判断头,我们从0开始,将下标为0的数和lower-1比较得到第一个range。最后循环到length停止,当下标为length时,我们将当前指针指向upper+1,并判断upper+1和数组末尾是否能构成最后一个区间。

对于第二个问题,我们只要判断这个区间的起止是否一样就行了

对于第三个问题,我们用prev+1和curr-1来标记这个区间的起止,因为prev和curr都是数组中的数,所以解决了每个区间的边界问题

代码

public class Solution {    public List
findMissingRanges(int[] nums, int lower, int upper) { List
res = new LinkedList
(); // 初始化prev为lower-1,判断是否存在“第一个”区间 int prev = lower - 1, curr = 0; for(int i = 0 ; i <= nums.length; i++){ // 当遍历到length时,设置curr为upper+1,判断是否存在“最后一个”区间 curr = i == nums.length ? upper + 1 : nums[i]; // 如果上一个数和当前数相差大于1,说明之间有区间 if(curr - prev > 1){ res.add(getRanges(prev+1, curr-1)); } prev = curr; } return res; } private String getRanges(int from, int to){ return from == to ? String.valueOf(from) : from + "->" + to; }}

转载地址:http://wmhal.baihongyu.com/

你可能感兴趣的文章
apache用户认证
查看>>
webservice快速入门-SOAP和WSDL
查看>>
cisco 单臂路由配置及使用
查看>>
被黑客种下恶意程序进行挖矿的排除案例
查看>>
day17-vim的使用及实践(二)
查看>>
在Linux中安装Oracle(较详细图解)
查看>>
Java反序列化之commons-beanutils分析
查看>>
apache源码编译时报错ssl_engine_init.c:546: error: 'STACK' undeclared (first use in this function)...
查看>>
发改委印发三年行动计划 智能机器人有望成为下一片蓝海
查看>>
Nginx日志定时切割压缩
查看>>
python day Twelve
查看>>
linux命令——tar
查看>>
DOCKERFILE注意事项
查看>>
hadoop伪分布式2.4.1安装
查看>>
Supervisor 来管理进程
查看>>
MongoDB分布式
查看>>
关于Mysql5.6半同步主从复制的开启方法
查看>>
NB-IoT芯片与模组厂商大赏 2018头一件大事不可错过
查看>>
SecureCRT自动登录
查看>>
深入理解AVL树
查看>>