C ++中数组值的三角形排列的最大高度
问题陈述
给定一个数组,我们需要从数组值中找到可以形成的三角形的最大高度,以使第(i+1)个级别包含更多元素,而上一个级别的总和更大。
示例
如果输入数组为{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