在 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
廣告