Missing Ranges
Given a sorted integer array where the range of elements are [lower, upper] inclusive, return its missing ranges. eg: [0,99] : {5, 9,11} => {0~4, 6~8, 10, 12~99}.
idea
- 本来题目给的例子很简单, 就是用2 pointers: prev, curr. 每次比较curr-prev是否大于1, 若大于, 说明有个range了. 最简单的就是
5,9
, 这个range就是prev+1~curr-1
, 如果这个range只有一个数, 那么直接prev+1
. 但是如果lower到A[0]之间也有range, 或者A[last]到upper之间有missing range怎么处理, 我一开始加了对应的if/else来处理这2中corner cases. 但觉得还是有点复杂.
Ethan Li的牛答案: 加入虚拟的头和尾
- 正如平时的linkedlist的dummy node, 或者是graph里面的dummy root(记得之前见过从graph的2头夹迫). 这里大牛也是.
- 加入lower-1, 和upper+1. 以及invariant: prev, curr分别指向上一个range的结尾和当前遍历的数字.
- 如图一目了然: .
- 代码实现的漂亮.