package LeetCode_163
/**
* 163. Missing Ranges
* (Prime)
*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"]
* */
class Solution {
/*
* solution: Two pointer, lower_ and upper_, keep checking lower_ and update it if need;
* Time complexity:O(n), Space complexity:O(1)
* */
fun getRanges(nums: IntArray, lower: Int, upper: Int): List<String> {
val result = ArrayList<String>()
//use long to avoid stack overflow
var lower_ = lower.toLong()
val upper_ = upper.toLong()
//keep checking lower
for (num in nums) {
if (num.toLong() == lower_) {
//increasing the lower
lower_++
} else if (lower_ < num) {
//for example: lower_ is 2, num is 3
if (lower_ + 1 == num.toLong()) {
result.add(lower_.toString())
} else {
//for example: lower_ is 4, num is 50
result.add("$lower_->${num - 1}")
}
//update lower
lower_ = num.toLong() + 1
}
}
//check the upper
if (lower_ == upper_) {
result.add(lower_.toString())
} else {
result.add("$lower_->$upper_")
}
return result
}
}