""" 三元组 给定一个整数数组numbers, 判断是否存在三元组[numbers[x],numbers[y] numbers[z]], 满足x != y、x != z、y != z, 同时还满足numbers[x]+ numbers[y]+ numbers[z] == 0。 请返回所有和为0且不重复的三元组。 注意:返回值不可以包含重复的三元组。 """ def triple(numbers): """ 寻找数组中所有满足条件的三个数,使得它们的和为零。 参数: numbers -- 输入的整数数组 返回: 所有满足条件的三个数的列表,每个三元组作为一个子列表。 """ # 初始化结果列表 result = [] # 对数组进行排序,以便后续使用二分查找 numbers.sort() # 获取数组长度 length = len(numbers) # 遍历数组,寻找每个可能的第一个数 for x in range(length): # 如果当前数与前一个数相同,则跳过,避免重复 if x > 0 and numbers[x] == numbers[x - 1]: continue # 初始化第二个数的索引 z = length - 1 # 计算目标值,即需要找到的第三个数的相反数 target = -numbers[x] # 从当前数的下一个数开始,遍历数组,寻找第二个数 for y in range(x + 1, length): # 如果当前数与前一个数相同,则跳过,避免重复 if y > x + 1 and numbers[y] == numbers[y - 1]: continue # 使用二分查找调整第三个数的索引 while y < z and numbers[y] + numbers[z] > target: z -= 1 # 如果第二个数的索引追上了第三个数的索引,说明没有满足条件的数,跳出循环 if y == z: break # 如果找到满足条件的三个数,将其添加到结果列表中 if numbers[y] + numbers[z] == target: result.append([numbers[x], numbers[y], numbers[z]]) # 返回所有满足条件的三个数的列表 return result if __name__ == '__main__': numbers = [-1, 0, 1, 2, -1, -4] print(triple(numbers))
三元组:判断是否存在三元组
未经允许不得转载:创想未来 » 三元组:判断是否存在三元组
评论前必须登录!
注册