java - 如何计算左最高和右最高高度?
问题描述
我必须编写一个计算当前索引的最高左和最高右高度的方法。假设我们有数组 {1,4,7,3,2},所以对于索引 1 ( 高度 4) - the maxLeftHeight=1
,maxRightHeight=7
对于索引 2(height 7) - maxLeftHeight=4
,maxRightHeight=3
依此类推...
第一个和最后一个索引不计算在内,因此数组从 1 开始计数,并在array.length-1
我试图为此编写代码,这就是我得到的:
public String getCurrentMaxHeights(int[] height)
{
int maxLeft = 0;
int maxRight = 0;
String st = "";
for (int i = 1; i < height.length - 1; i++)
{
maxRight = Math.max(height[i + 1], height[height.length - 1]);
maxLeft = Math.max(height[i - 1], height[0]);
st += "The max left height for " + height[i] + " is " + maxLeft +
" the max right height is " + maxRight + " \n";
}
return st;
}
输出:
1 的最大左侧高度为 2 右侧的最大高度为 3 1 的左侧最大高度为 2 右侧的最大高度为 4 4 的左侧最大高度为 2 右侧的最大高度为 3 1 的左侧最大高度为 4最大右侧高度为 3 最大左侧高度为 2 最大右侧高度为 3 最大左侧高度为 2 最大右侧高度为 3
这是错误的,我该如何修复它是正确的?
解决方案
您需要使用2 nested for-loops
:
- 一个用于获取
maxLeft
. - 一个用于获取
maxRight.
i
当前索引在哪里,从0
到i - 1
,计算maxLeft
和从i + 1
到n - 1
,计算maxRight
。
public String getCurrentMaxHeights(int[] height)
{
int maxLeft;
int maxRight;
String st = "";
for (int i = 1; i < height.length - 1; i++)
{
// Initialize to first element.
maxLeft = height[0]
// Update if any are greater.
for (int j = 1; j < i; j++)
maxLeft = Math.max(maxLeft, height[j])
// Initialize to element following i.
maxRight = height[i + 1]
// Update if any are greater.
for (int j = i + 2; j < height.length; j++)
maxRight = Math.max(maxRight, height[j])
st += "The max left height for " + height[i] + " is " + maxLeft +
" the max right height is " + maxRight + " \n";
}
return st;
}
推荐阅读
- c++ - 如何对每个顶点进行cin边缘?
- c++ - 如何在 C++ 中的字符串向量中找到重复的单词?
- powerbi - 为什么从 Power Bi 中的切片器中选择值时条件格式会禁用?
- objective-c - 安装 MuPDF 时 Pod 安装失败
- unit-testing - 如何创建具有平等管理顺序的 LinkedHashMap
- php - 如果数据不为空,则使用 where 查询
- javascript - 如何将图像显示到vue js Datatable中
- r - 识别大型数据集中具有高相关性的列
- php - 'clearToolbar'工具栏后的jqGrid没有结果
- java - build.gradle 中的多个存储库不起作用 (jzy3d) (MultiModuleProject)