คำชี้แจงปัญหา
จากอาร์เรย์ เราต้องหาความสูงสูงสุดของสามเหลี่ยมที่เราสร้างได้ จากค่าอาร์เรย์ที่ทุกๆ (i+1) th ระดับมีองค์ประกอบมากขึ้นโดยมีผลรวมมากขึ้นจากระดับก่อนหน้า
ตัวอย่าง
หากอาร์เรย์อินพุตคือ {40, 100, 20, 30 } คำตอบคือ 2 เป็น −
เราสามารถมี 100 และ 20 ที่ระดับล่างสุด และ 40 หรือ 30 ที่ระดับบนของปิรามิด
อัลกอริทึม
วิธีแก้ปัญหาของเราอยู่บนตรรกะที่ว่าถ้าเรามีความสูงสูงสุด h ที่เป็นไปได้สำหรับปิรามิดของเรา ดังนั้น ( h * (h + 1) ) / 2 องค์ประกอบจะต้องอยู่ในอาร์เรย์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int getMaximumHeight(int *arr, int n) { int result = 1; for (int i = 1; i <= n; ++i) { long long y = (i * (i + 1)) / 2; if (y < n) { result = i; } else { break; } } return result; } int main() { int arr[] = {40, 100, 20, 30}; int n = sizeof(arr) / sizeof(arr[0]); cout << "Result = " << getMaximumHeight(arr, n) << endl; return 0; }
ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -
Result = 2