Problema de intervalo de resumen de tarjeta perforada Leikou 2021.1.10

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;
    }
};

Supongo que te gusta

Origin blog.csdn.net/weixin_45780132/article/details/112424168
Recomendado
Clasificación