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
广告