题目

image.png

思路

思路一:暴力破解
思路二:
image.png

代码

暴力破解法

  1. class Solution:
  2. def threeSum(self, nums: List[int]) -> List[List[int]]:
  3. # 暴力破解
  4. ans = []
  5. nums.sort()
  6. for i in range(len(nums)-2):
  7. for j in range(i+1, len(nums)-1):
  8. for k in range(j+1, len(nums)):
  9. if nums[i] + nums[j] + nums[k] == 0:
  10. tmp = [nums[i], nums[j], nums[k]]
  11. if tmp not in ans:
  12. ans.append(tmp)
  13. return ans

暴力破解算法复杂度(O(n^3),超时了

思路二

  1. # 参考评论区大佬做法
  2. class Solution:
  3. def threeSum(self, nums: List[int]) -> List[List[int]]:
  4. n=len(nums)
  5. res=[]
  6. if(not nums or n<3):
  7. return []
  8. nums.sort()
  9. res=[]
  10. for i in range(n):
  11. if(nums[i]>0):
  12. return res
  13. if(i>0 and nums[i]==nums[i-1]):
  14. continue
  15. L=i+1
  16. R=n-1
  17. while(L<R):
  18. if(nums[i]+nums[L]+nums[R]==0):
  19. res.append([nums[i],nums[L],nums[R]])
  20. while(L<R and nums[L]==nums[L+1]):
  21. L=L+1
  22. while(L<R and nums[R]==nums[R-1]):
  23. R=R-1
  24. L=L+1
  25. R=R-1
  26. elif(nums[i]+nums[L]+nums[R]>0):
  27. R=R-1
  28. else:
  29. L=L+1
  30. return res
  31. 作者:wu_yan_zu
  32. 链接:https://leetcode-cn.com/problems/3sum/solution/pai-xu-shuang-zhi-zhen-zhu-xing-jie-shi-python3-by/
  33. 来源:力扣(LeetCode
  34. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。