请告诉我,如何用O替换X,直方图中最大的矩形是什么?
这是我生成直方图的代码:
public static void histogram() {
double[] data1 = { 4.1, 6.2, 4.5, 8.0, 7.1, 6.2, 6.3, 0.1, 4.5, 5.1 };
for (int columns = data1.length; columns >= 1; columns--) {
for (int zeilen = 0; zeilen < data1.length; zeilen++) {
if (data1[zeilen] >= columns) {
System.out.print("X");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
histogram();
}
输出应大致如下:
X
XX
X OOOO
X OOOO X
XXXOOOO XX
XXXOOOO XX
XXXOOOO XX
XXXOOOO XX
或者像这样:
X
XX
X XXXX
X XXXX X
OOOOOOO XX
OOOOOOO XX
OOOOOOO XX
OOOOOOO XX
最大的领域就在哪里。
答案 0 :(得分:0)
最简单的方法是先在数组中找到最大值。
int max=0;
for (int i = 0; i < data1.length; i++) {
if (data1[i] > max)
max = data1[i];
}
然后在循环中,检查您使用的数据是否等于最大值,并使用"O"
显示。
if (data1[zeilen] == max)
System.out.println("O");
else
System.out.println("X");
然后您的最大矩形将为"O"
。
答案 1 :(得分:0)
一种方法是确定数组中哪个索引值包含最大元素。您可以使用循环或流来执行此操作:
int maxIndex = IntStream.range(0, data1.length)
.reduce((i1, i2) -> data1[i1] > data1[i2] ? i1 : i2)
.orElseGet(() -> 0); // If only one element, max must be first
然后在打印出直方图时,您可以根据索引是否匹配来选择要输出的字符。
for (int columns = data1.length; columns >= 1; columns--) {
for (int zeilen = 0; zeilen < data1.length; zeilen++) {
if (data1[zeilen] >= columns) {
System.out.print(zeilen == maxIndex ? 'O' : 'X');
} else {
System.out.print(" ");
}
}
System.out.println();
}
我不确定第一个循环中columns
的范围(从data1.length
到1
)是一个很好的选择。从(int)data1[maxIndex]
到1
可能会更好。
好的,编辑使它成为一个更有趣的问题。解决这个问题的最简单方法可能是递归细分:
对于范围[start, end)
,找到最小值为index
的直方图索引。这可以与上面的最大索引值代码类似地计算。
如果[start, index)
,请递归重复start < index
的步骤1。
如果[index + 1, end)
,请递归重复index + 1 < end
的步骤1。
返回步骤1,2和3中具有最大区域的矩形。