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