【发布时间】:2019-12-06 17:26:10
【问题描述】:
我需要为“直方图中的最大矩形区域”问题提出一个递归解决方案。对于不熟悉的人,这里有一个解释:
直方图是一种统计信息的显示,它使用矩形来显示数据项的频率。这些矩形通常是垂直的。
在直方图中,所有条形通常大小不同。在这个问题中,你必须在直方图中找到最大的矩形区域。例如,如果尺寸为 [4,1,4,5,6],则最大面积为 12,因为我们取最后 3 个条形图 [4,5,6],取最短的条形图 [4],然后应用矩形面积公式 (4x3=12)。
唯一的要求是:
-必须在java中完成。
-无法使用堆栈。
-它必须是递归的。
如果有帮助,我有一个非递归解决方案:
public static int MaxHistograma(int[] histograma) {
if (histograma.length == 1) {
return histograma[0];
}
int res = 0;
for (int i = 0; i < histograma.length - 1; i++) {
int min = histograma[i];
for (int j = i + 1; j < histograma.length; j++) {
min = Math.min(min, histograma[j]);
res = Math.max(histograma[j], Math.max(res, min * (j - i + 1)));
res = Math.max(res, histograma[i]);
}
}
return res;
}
【问题讨论】:
-
鉴于您有奇怪的约束,例如“它必须是递归的”,我想这是作业吗?如果是这样,您希望我们做什么?如果您希望我们编写整个解决方案(否),您希望从中获得什么?如果您不想要完整的解决方案,您具体要做什么?