

Python,速成心法
敲代码,查资料,问Ai
练习,探索,总结,优化

★★★★★博文创作不易,源码代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★
Python打包教程07:还不会用--add-data参数,添加资源文件吗?
Python打包教程04:UPX安装与使用(减小.exe体积)
Python打包教程03:PyInstaller命令使用指南
Python教程:PyCharm安装过程中遇到的中英文对照表
Python教程:找到字符串中最长回文子串(上海自来水来自海上)
输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2], [-1,0,1]]解释:(-1, -1, 2) 和为 0,(-1, 0, 1) 和为 0。注意 (-1, 0, 1) 和 (0, 1, -1) 视为重复,只保留一组。
输入:nums = [0,1,1]输出:[]解释:没有三个数的和为 0。
↓ 完整源码如下 ↓
# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythondef three_sum(nums):"""返回所有和为 0 的不重复三元组。参数:nums: List[int]返回:List[List[int]]: 三元组列表,每个三元组内部升序排列。"""nums.sort() # 先排序,便于去重和双指针n = len(nums)result = []for i in range(n - 2):# 跳过重复的第一个数if i > 0 and nums[i] == nums[i - 1]:continue# 优化:如果当前最小三个数之和 > 0,后面不可能有解if nums[i] + nums[i + 1] + nums[i + 2] > 0:break# 优化:如果当前数和最大两个数之和 < 0,跳过这个 iif nums[i] + nums[n - 2] + nums[n - 1] < 0:continueleft = i + 1right = n - 1target = -nums[i]while left < right:current_sum = nums[left] + nums[right]if current_sum == target:result.append([nums[i], nums[left], nums[right]])# 跳过重复的 leftwhile left < right and nums[left] == nums[left + 1]:left += 1# 跳过重复的 rightwhile left < right and nums[right] == nums[right - 1]:right -= 1left += 1right -= 1elif current_sum < target:left += 1else:right -= 1return result# 测试用例if __name__ == "__main__":print(three_sum([-1, 0, 1, 2, -1, -4])) # [[-1, -1, 2], [-1, 0, 1]]print(three_sum([0, 1, 1])) # []print(three_sum([0, 0, 0])) # [[0, 0, 0]]print(three_sum([-2, 0, 0, 2, 2])) # [[-2, 0, 2]]print(three_sum([-4, -2, -2, -2, 0, 1, 2, 2, 2, 3, 3, 4, 4, 6, 6]))# 输出应包含多组不重复三元组# [[-4, -2, 6], [-4, 0, 4], [-4, 1, 3], [-4, 2, 2], [-2, -2, 4], [-2, 0, 2]]
完毕!!感谢您的收看
------★★历史博文集合★★------
