Ejemplos LeetCode (Python)


Ejemplo 1: Suma de dos números (Two Sum)

def two_sum(nums, target):
    # Crear un diccionario para almacenar el índice de cada número
    num_map = {}
    
    # Iterar sobre la lista de números
    for i, num in enumerate(nums):
        # Calcular el complemento que, junto con el número actual, suma el objetivo
        complement = target - num
        
        # Si el complemento ya está en el diccionario, hemos encontrado la solución
        if complement in num_map:
            return [num_map[complement], i]
        
        # De lo contrario, almacenar el número actual y su índice en el diccionario
        num_map[num] = i
    
    return []
    

Ejemplo 2: Longest substring without repeating characters

def length_of_longest_substring(s):
    # Diccionario para almacenar la última posición de cada carácter
    char_index = {}
    max_length = 0
    start = 0
    
    # Iterar sobre la cadena de caracteres
    for i, char in enumerate(s):
        # Si el carácter ya ha sido encontrado y está en el rango de la subcadena actual
        if char in char_index and start <= char_index[char]:
            start = char_index[char] + 1
        else:
            max_length = max(max_length, i - start + 1)
        
        # Actualizar la última posición del carácter actual
        char_index[char] = i
    
    return max_length
    

Ejemplo 3: Valid parentheses

def is_valid(s):
    # Mapa de pares de paréntesis
    bracket_map = {")": "(", "]": "[", "}": "{"}
    stack = []
    
    # Iterar sobre cada carácter en la cadena
    for char in s:
        # Si es un paréntesis de cierre
        if char in bracket_map:
            # Comparar con el último paréntesis de apertura en la pila
            top_element = stack.pop() if stack else '#'
            if bracket_map[char] != top_element:
                return False
        else:
            stack.append(char)
    
    return not stack
    

Ejemplo 4: Merge two sorted lists

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def merge_two_lists(l1, l2):
    dummy = ListNode()
    current = dummy
    
    # Comparar los nodos de ambas listas enlazadas
    while l1 and l2:
        if l1.val < l2.val:
            current.next = l1
            l1 = l1.next
        else:
            current.next = l2
            l2 = l2.next
        current = current.next
    
    # Adjuntar el resto de la lista que aún tiene nodos
    current.next = l1 or l2
    
    return dummy.next
    

Ejemplo 5: Median of two sorted arrays

def find_median_sorted_arrays(nums1, nums2):
    # Unir ambas listas y ordenarlas
    nums = sorted(nums1 + nums2)
    length = len(nums)
    
    # Calcular la mediana
    if length % 2 == 1:
        return nums[length // 2]
    else:
        return (nums[length // 2 - 1] + nums[length // 2]) / 2