สมมติว่าเรามีอาร์เรย์ของจำนวนบวก มี n องค์ประกอบในอาร์เรย์นั้น เราต้องหาผลรวมสูงสุดของแฝดสาม (ai + aj + ak ) เพื่อให้ 0 <=i
ดังนั้น หากอินพุตเป็น 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 ทำ
first_max :=0, วินาที_max :=0
สำหรับ j ในช่วง 0 ถึง i ทำ
สำหรับ j ในช่วง i + 1 ถึง n ทำ
ถ้า A[j]> A[i] แล้ว
second_max :=สูงสุดของวินาที_max, A[j]
ถ้า first_max และ second_max ไม่ใช่ศูนย์ ดังนั้น
res :=สูงสุดของ res, first_max + A[i] + วินาที_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