首页 > 解决方案 > 如何计算左最高和右最高高度?

问题描述

我必须编写一个计算当前索引的最高左和最高右高度的方法。假设我们有数组 {1,4,7,3,2},所以对于索引 1 ( 高度 4) - the maxLeftHeight=1maxRightHeight=7对于索引 2(height 7) - maxLeftHeight=4maxRightHeight=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

这是错误的,我该如何修复它是正确的?

标签: javaarraysloopsmax

解决方案


您需要使用2 nested for-loops

  • 一个用于获取maxLeft.
  • 一个用于获取maxRight.

i当前索引在哪里,从0i - 1,计算maxLeft和从i + 1n - 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;
}

推荐阅读