📅  最后修改于: 2023-12-03 14:58:21.578000             🧑  作者: Mango
在计算机科学的门(GATE)考试中,第 45 题出现在 2021 年的设置 1 中。这道题目是一个编程题,旨在测试程序员对数据结构和算法的理解和应用能力。
给定一个包含 n 个正整数的数组 nums,你需要找到三元组 (i, j, k) ,其中 0 ≤ i < j < k < n 并满足以下条件:
你需要实现一个函数 findTriplets(nums: List[int]) -> List[Tuple[int, int, int]]
,其中 nums
是输入的整数数组,函数需要返回符合条件的所有三元组的列表。
nums
,其中 3 ≤ len(nums) ≤ 10^4(i, j, k)
来表示输入:
findTriplets([3, 7, 11, 13, 17, 19, 23, 29, 31])
输出:
[(0, 2, 4), (1, 4, 5), (2, 3, 7), (2, 5, 6), (3, 4, 8)]
该问题可以通过以下步骤解决:
is_prime(n: int) -> bool
,用于判断给定的整数 n
是否为质数。triplets
,用于存储符合条件的三元组。i
,内层循环控制 j
和 k
。(i, j, k)
,计算和 sum = nums[i] + nums[j] + nums[k]
。sum
是否为质数,并且判断 nums[i] < nums[j] < nums[k]
或者 nums[i] > nums[j] > nums[k]
是否成立。如果满足条件,则将三元组 (i, j, k)
添加到 triplets
列表中。triplets
列表作为最终的结果。from typing import List, Tuple
def is_prime(n: int) -> bool:
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def findTriplets(nums: List[int]) -> List[Tuple[int, int, int]]:
triplets = []
for i in range(len(nums)):
for j in range(i+1, len(nums)):
for k in range(j+1, len(nums)):
if (nums[i] < nums[j] < nums[k] or nums[i] > nums[j] > nums[k]) and is_prime(nums[i] + nums[j] + nums[k]):
triplets.append((i, j, k))
return triplets
以上是一个解题的例子,你可以将该代码按markdown标记进行显示。