在 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):和 = 12,(3 6 10):和 = 19,(3 4 10):和 = 17,(4 5 10):和 = 19,(2 5 10):和 = 17。因此最大值為 19

為了解決這個問題,我們將遵循以下步驟:

  • n := A 的大小

  • res := 0

  • 對於 i 從 1 到 n - 1,執行:

    • first_max := 0,second_max := 0

    • 對於 j 從 0 到 i,執行:

      • 如果 A[j] < A[i],則:

        • first_max := first_max 和 A[j] 中的最大值

    • 對於 j 從 i + 1 到 n,執行:

      • 如果 A[j] > A[i],則:

        • second_max := second_max 和 A[j] 中的最大值

    • 如果 first_max 和 second_max 不為零,則:

      • res := res 和 first_max + A[i] + second_max 中的最大值

  • 返回 res

示例

讓我們看看下面的實現以更好地理解:

 線上演示

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

更新於:2020年8月25日

423 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告