在Python中查找数组中三元组的最大和,例如i
假设我们有一个正数数组,该数组中有n个元素,我们必须找到三元组的最大和(ai+aj+ak),使得0<=i<j<k<n和ai<aj<ak。
因此,如果输入像A=[3,6,4,2,5,10],那么输出将为19,因为三元组为(345):sum=12,(3610):sum=19,(3410):总和=17,(4510):总和=19,(2510):总和=17,因此最大值为19
为了解决这个问题,我们将遵循以下步骤-
n:=A的大小
res:=0
对于1到n-1范围内的i
res:=res的最大值,first_max+A[i]+second_max
如果A[j]>A[i],则
second_max:=second_max的最大值,A[j]
如果A[j]<A[i],则
first_max:=first_max的最大值,A[j]
first_max:=0,second_max:=0
对于范围在0到i之间的j,执行
对于范围i+1至n的j,执行
如果first_max和second_max不为零,则
返回资源
示例
让我们看下面的实现以更好地理解-
def get_max_triplet_sum(A) : n = len(A) res = 0 for i in range(1, (n - 1)) : first_max = 0 second_max = 0 for j in range(0, i) : if (A[j] < A[i]) : first_max = max(first_max, A[j]) for j in range((i + 1), n) : if (A[j] > A[i]) : second_max = max(second_max, A[j]) if (first_max and second_max): res = max(res, first_max + A[i] + second_max) return res A = [3,6,4,2,5,10] print(get_max_triplet_sum(A))
输入项
[3,6,4,2,5,10]
输出结果
19