C++ 中陣列值三角形排列的最大高度
問題陳述
給定一個數組,我們需要從中查詢我們可由陣列值形成的三角形的最大高度,使得每個 (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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
JavaScript
PHP