โจทย์: หา triplet (a[i], a[j], a[k]) ที่ i ตัวอย่าง: A=[3,6,4,2,5,10] → triplets ที่ valid: (3,4,5)=12, (3,6,10)=19, (3,4,10)=17, (4,5,10)=19, (2,5,10)=17 → max = 19 fixed j เป็นกลาง หา max a[i] < a[j] ด้านซ้าย และ max a[k] > a[j] ด้านขวา หมายเหตุ: สามารถ optimize เป็น O(n log n) ได้ด้วย Segment Tree หรือ BIT สำหรับ n ใหญ่อัลกอริทึม O(n²)
ตัวอย่างโค้ด
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(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)) # 19
ผลลัพธ์
19