[Preguntas de cepillado de algoritmos] Dos punteros para resolver la suma de tres números

> Problema: 15. Suma de tres números

tren de pensamiento

Esta pregunta en sí debe prestar atención al hecho de que puede haber soluciones repetidas. Python no puede usar set para deduplicar la lista anidada en este tipo de lista. Probablemente se deba a que la lista no se puede expresar en forma de hashtype. Debido a que el conjunto necesita expresar datos en forma de clave: valor, aún es difícil de expresar al final.

método de resolución de problemas

Al resolver el problema aquí, todavía se considera la solución de doble puntero. Para mayor eficiencia, necesitamos ordenar la matriz preprocesada. Esto acelera nuestro procesamiento.
Para los datos cuya longitud es inferior a 3 o no tienen números negativos, debemos proporcionar soluciones especiales para mejorar la velocidad de ejecución del programa.

la complejidad

  • complejidad del tiempo:

Agregar complejidad de tiempo, ejemplo: O ( n 2 ) O(n^2)O ( n2 )

  • Complejidad del espacio:

Añadir complejidad de espacio, ejemplo: O ( 1 ) O(1)O ( 1 )

Código


class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums = sorted(nums)
        res_list = []

        for index in range(0,len(nums)):
            if nums[index] > 0:
                break
            if len(nums) < 3:
                break
                
            L = index + 1
            R = len(nums) - 1
            while L < R:
                if nums[index] + nums[L] + nums[R] == 0:
                    item = [nums[index],nums[L],nums[R]]
                    if item not in res_list:
                        res_list.append(item)
                    while L<R and nums[L] == nums[L+1]:
                        L = L + 1 
                    while L < R and nums[R] == nums[R-1]:
                        R = R - 1
                    L = L + 1
                    R = R - 1
                
                elif nums[index] + nums[L] + nums[R] > 0:
                    R = R - 1
                elif nums[index] + nums[L] + nums[R] < 0:
                    L = L + 1
        return res_list
        

Supongo que te gusta

Origin blog.csdn.net/qq_27180763/article/details/129477402
Recomendado
Clasificación