东莞网站设计讯息,重庆市建设工程信息网招标文件,商贸网站源码,什么是php网站题目
给你一个整数数组 nums #xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k #xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请
你返回所有和为 0 且不重复的三元组。
注意#xff1a;答案中不可以包含重复的三元组。 …题目
给你一个整数数组 nums 判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k 同时还满足 nums[i] nums[j] nums[k] 0 。请
你返回所有和为 0 且不重复的三元组。
注意答案中不可以包含重复的三元组。
示例 1
输入nums [-1,0,1,2,-1,-4] 输出[[-1,-1,2],[-1,0,1]] 解释 nums[0] nums[1] nums[2] (-1) 0 1 0 。 nums[1] nums[2] nums[4] 0 1 (-1) 0 。 nums[0] nums[3] nums[4] (-1) 2 (-1) 0 。 不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。 注意输出的顺序和三元组的顺序并不重要。 示例 2
输入nums [0,1,1] 输出[] 解释唯一可能的三元组和不为 0 。 示例 3
输入nums [0,0,0] 输出[[0,0,0]] 解释唯一可能的三元组和为 0 。
答案
以下是实现该功能的Python代码
def threeSum(nums):# 创建一个空列表用于存储符合条件的三元组result []# 对数组进行排序以便后续遍历时可以更方便地找到符合条件的三元组nums.sort()# 遍历数组中的每一个元素将其作为第一个元素for i in range(len(nums)-2):# 如果当前元素与前一个元素相等则跳过避免重复的三元组if i 0 and nums[i] nums[i-1]:continue# 定义两个指针分别指向数组的末尾和倒数第二个元素left i 1right len(nums) - 1# 在剩下的元素中寻找符合条件的三元组while left right:# 计算当前三元组的和sum nums[i] nums[left] nums[right]# 如果和等于0则找到了符合条件的三元组if sum 0:result.append([nums[i], nums[left], nums[right]])# 跳过重复的三元组while left right and nums[left] nums[left1]:left 1while left right and nums[right] nums[right-1]:right - 1# 向右移动指针继续寻找下一个符合条件的三元组left 1right - 1# 如果和小于0则向右移动左指针寻找更大的负数elif sum 0:left 1# 如果和大于0则向左移动右指针寻找更小的正数else:right - 1return result首先对输入的数组进行排序然后遍历数组中的每一个元素将其作为第一个元素。在剩下的元素中寻找符合条件的三元组通过两个指针分别指向数组的末尾和倒数第二个元素并根据当前三元组的和小于、等于或大于0来移动指针。如果找到了符合条件的三元组则将其添加到结果列表中并继续寻找下一个符合条件的三元组。最后返回结果列表。