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.

Techo del elemento en un array ordenado

Hola, estoy resolviendo problemas de Estructuras de Datos y Algoritmos y encontré un problema llamado “techo del elemento en un arreglo ordenado”. En este problema, se nos da un arreglo ordenado y si el elemento objetivo está presente en el arreglo ordenado, debemos devolver el objetivo. Si el elemento objetivo no se encuentra en el arreglo ordenado, debemos devolver el elemento más pequeño que sea mayor que el objetivo. He escrito el código y también he realizado algunos casos de prueba, pero necesito verificar si todo funciona correctamente. Este problema no está en LeetCode, donde podría ejecutarlo con diferentes casos. Necesito sugerencias/comentarios sobre si el problema está resuelto de la manera correcta y si daría resultados correctos en todos los casos.

class Solution:
    #Mi enfoque
    def smallestNumberGreaterThanTarget(self, nums, target):
        start = 0
        end = len(nums)-1

        if target > nums[end]:
            return -1
        while start <= end:
            mid = start + (end-start)//2

            if nums[mid] == target:
                return nums[mid]
            elif nums[mid] < target:
                if nums[mid+1] >= target:
                    return nums[mid+1]
                start = mid + 1
            else:
                end = mid-1

        return nums[start]
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Comentarios:

    En general, tu código se ve bien y tu enfoque para este problema parece correcto. Aquí tienes algunos comentarios específicos:

    • En tu declaración if donde verificas si target es mayor que nums[end], estás usando > en lugar de >. Esto parece ser un error debido a la conversión al formato de markdown.
    • No es necesario devolver -1 si target es mayor que nums[end]. El problema establece que el arreglo está ordenado, por lo que sabemos que todo lo que está después de nums[end] también será mayor que target. Por lo tanto, puedes simplemente devolver nums[end] para satisfacer la condición de devolver el elemento más pequeño mayor que target.
    • Tu condición de bucle start <= end es correcta, pero ten en cuenta que incluye el caso en el que start = end. Entonces, cuando devuelvas nums[start] al final, sabrás que es el elemento más pequeño mayor o igual atarget`.
    • No incluiste ningún caso de prueba en tu código, pero asegúrate de probarlo a fondo con diferentes arreglos y objetivos para asegurarte de que funcione correctamente.

    En general, buen trabajo en este problema! Tu código se ve bien estructurado y debería funcionar correctamente en todos los casos.

Comments are closed.