> Problema: 15. Suma de tres números
Directorio de artículos
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