在Python中查找数组中三元组的最大和,例如i <j <k和a [i] <a [j] <a [k]

假设我们有一个正数数组,该数组中有n个元素,我们必须找到三元组的最大和(ai + aj + ak),使得0 <= i <j <k <n和ai <aj < ak。

因此,如果输入像A = [3,6,4,2,5,10],那么输出将为19,因为三元组为(3 4 5):sum = 12,(3 6 10):sum = 19,(3 4 10):总和= 17,(4 5 10):总和= 19,(2 5 10):总和= 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
    猜你喜欢