Solución del problema de Pintia——7-22 Horario del jefe

7-22 Horario del jefe

Titulo original:

Alguien publicó el horario de un jefe en Sina Weibo, indicando que se levanta a las 4:30 todos los días. Pero inmediatamente algunos cibernautas con mirada aguda preguntaron: Este horario está incompleto, ¿qué haces desde las nueve de la mañana hasta la una de la tarde?

Esta pregunta le pide que escriba un programa para verificar cualquier horario y encontrar el período de tiempo que no está escrito en él.

Formato de entrada:

La primera línea de entrada proporciona un número entero positivo N , que es el número de períodos de tiempo enumerados en el cronograma. Luego hay N líneas, cada línea proporciona un período de tiempo y el formato es:

hh:mm:ss - hh:mm:ss

Entre ellos hh, se encuentran horas, minutos y segundos mmde ssdos dígitos, respectivamente. La primera vez es la hora de inicio y la segunda es la hora de finalización. La pregunta garantiza que todos los horarios estén dentro de un día (es decir, de 00:00:00 a 23:59:59); que el intervalo entre cada intervalo sea de al menos 1 segundo; y que dos intervalos de tiempo dados se superpongan como máximo en un punto final. no hay superposición de intervalos.

Formato de salida:

Enumere los intervalos que no aparecen en el horario en orden cronológico, ocupando cada intervalo una línea y en el mismo formato que la entrada. La pregunta garantiza que hay al menos un intervalo que debe generarse.

.

Ideas para resolver problemas:

  1. Importe readlineel módulo y cree un objeto de interfaz: primero readlineintroduzca el módulo y use createInterfacemétodos para crear un objeto de interfaz rl. Este objeto establece el flujo de entrada en entrada estándar.
  2. Leer entrada y almacenar: al escuchar 'line'eventos, la entrada se almacena en una matriz buf.
  3. Analiza la entrada y ordénala: utiliza sliceel método para interceptar la matriz de entrada a partir del índice 1, elimina el primer elemento y asígnalo a una variable times. Luego use sortel método para timesordenar la matriz en orden ascendente porque necesitamos procesarla en el orden de períodos de tiempo.
  4. Inicializar variables: establezca la variable inicial starten una cadena '00:00:00', que indica el punto de tiempo de inicio del procesamiento, y resestablezca la variable inicial en una cadena vacía, utilizada para almacenar el período de tiempo de salida.
  5. Procesar cada período de tiempo: use un for ofbucle para recorrer timesla matriz y asignar cada período de tiempo a una variable i. Utilice splitel método para dividir el período de tiempo en dos tiempos y asignarlos a las variables beginy respectivamente end. Si begines mayor start, significa que falta un período de tiempo y el período de tiempo que falta se suma al resultado res. Actualizado starta la hora de finalización del período de tiempo actual end.
  6. Procesar el último período de tiempo: si la hora de finalización del último período de tiempo endes menor que 23:59:59, significa que hay un período de tiempo sin procesar al final y se agregará al resultado res.
  7. Resultado de salida: utilícelo para console.loggenerar la cadena de resultado sin los espacios iniciales y finales.

.

Código JavaScript (nodo):

const readline = require('readline');
const rl = readline.createInterface({
    
    
    input: process.stdin,
});
let buf = []

rl.on('line', (line) => {
    
    
    buf.push(line)
})

rl.on('close', () => {
    
    
    let times = buf.slice(1).sort()

    let start = '00:00:00'
    let res = ''
    for (let i of times) {
    
    
        let [begin, end] = i.split(' - ')
        if (begin > start) {
    
    
            res += `${
      
      start} - ${
      
      begin}\n`
        }
        start = end
    }
    if (start < '23:59:59') {
    
    
        res += `${
      
      start} - 23:59:59`
    }
    console.log(res.trim())
});

.

Análisis de complejidad:

Complejidad del tiempo: O (nlogn)
Complejidad espacial: O (n+m)

Supongo que te gusta

Origin blog.csdn.net/Mredust/article/details/133519759
Recomendado
Clasificación