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

更新日期:10-Jan-2020

82 次浏览

职业生涯强势启动

完成课程获得认证

开始学习
广告