Problema:
Dada una matriz de números enteros ordenados sin elementos repetidos.
Devuelve una lista de los rangos de rango ordenados más pequeños que cubren todos los números de la matriz. En otras palabras, cada elemento de nums está cubierto exactamente por un cierto rango, y no hay un número x que pertenezca a un cierto rango pero que no pertenezca a nums.
Cada intervalo de intervalo [a, b] en la lista debe mostrarse en el siguiente formato:
"a-> b", si a! = B
"a", si a == b
Ejemplo 1:
输入:nums = [0,1,2,4,5,7]
输出:["0->2","4->5","7"]
解释:区间范围是:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"
Ejemplo 2:
输入:nums = [0,2,3,4,6,8,9]
输出:["0","2->4","6","8->9"]
解释:区间范围是:
[0,0] --> "0"
[2,4] --> "2->4"
[6,6] --> "6"
[8,9] --> "8->9"
Ejemplo 3:
输入:nums = []
输出:[]
Ejemplo 4:
输入:nums = [-1]
输出:["-1"]
Ejemplo 5:
输入:nums = [0]
输出:["0"]
Idea:
solo atraviesa una vez
Código:
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> ans;
int left = 0;
for (int i = 0; i < nums.size(); ++i) {
if (i + 1 == nums.size() || nums[i] + 1 != nums[i + 1]) {
ans.push_back(std::to_string(nums[left]) + (left == i ? "" : "->" + std::to_string(nums[i])));
left = i + 1;
}
}
return ans;
}
};