es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una forma mejor que un bucle while para realizar esta función?

Estaba intentando algunos ejercicios de Python y me encontré con el límite de tiempo de 5 segundos en una de las pruebas. La función está preconfigurada con los parámetros y se me pide que escriba un código lo suficientemente rápido como para ejecutarse dentro del plazo máximo de 5 segundos.

Hay N platos en una fila en una cinta transportadora (kaiten belt), y el i-ésimo plato es del tipo Di. Algunos platos pueden ser del mismo tipo entre sí. Los N platos llegarán frente a ti, uno tras otro en orden, y por cada uno lo comerás siempre y cuando no sea del mismo tipo que cualquiera de los K platos anteriores que hayas comido. Comes muy rápido, así que puedes consumir un plato antes de que llegue el siguiente. Cualquier plato que elijas no comer mientras pasa será comido por otros.
Determina cuántos platos terminarás comiendo.

Problema
El código “funciona”, pero no es lo suficientemente rápido.

Código
La idea aquí es añadir la entrada D[i] si no está en la lista de “pastDishes” (que puede tener un tamaño de K).

from typing import List

Write any import statements here

def getMaximumEatenDishCount(N: int, D: List[int], K: int) -> int:
# Write your code here
numDishes=0
pastDishes=[]
i=0
while (i<n): if(d[i]=”” not=”” in=”” pastdishes):=”” numdishes+=”1″ pastdishes.append(d[i])=”” if=”” len(pastdishes)=””>K:
pastDishes.pop(0)
i+=1
return numDishes

¿Existe una forma más efectiva?</n):>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo probar el código con precisión y ofrecer un punto de referencia sin un tamaño de entrada específico, pero un método alternativo para optimizar este código es usar un deque (cola de doble final) en lugar de una lista para representar pastDishes. De esta manera, podemos evitar eliminar el primer elemento de la lista cuando su tamaño excede K, lo cual puede ser costoso en listas grandes.

    Aquí tienes un ejemplo de código utilizando deque:

    from typing import List
    from collections import deque
    
    def getMaximumEatenDishCount(N: int, D: List[int], K: int) -> int:
        numDishes = 0
        pastDishes = deque()
        for d in D:
            if d not in pastDishes:
                numDishes += 1
                pastDishes.append(d)
                if len(pastDishes) > K:
                    pastDishes.popleft()
        return numDishes
    

    Esta implementación tiene la misma complejidad temporal que el código original (O(N*K) en el peor caso), pero puede ser más rápida debido a la complejidad temporal constante de las operaciones append() y popleft() de un deque.

Comments are closed.