如何计算最高左侧和最高右侧的高度?

时间:2019-04-13 11:30:51

标签: java arrays loops max

我必须写一个计算最高和最高的方法 当前索引的正确高度。 假设我们有一个数组{1,4,7,3,2},因此对于索引1(高度4)-maxLeftHeight=1maxRightHeight=7和对于索引2(高度7)-{{ 1}},maxLeftHeight=4等...

第一个和最后一个索引不计数,因此数组从1开始计数,并在maxRightHeight=3处结束计数

我试图为此编写代码,这就是我得到的:

array.length-1

输出:

1的最大左高度是2,最大的右高度是3 1的最大左高度是2,最大的右高度是4 4的最大左高度是2,最大的右高度是3 1的最大左侧高度为4最大右侧的高度为3 1的最大左高度是2,最大的右高度是3 2的最大左高度是2,最大的右高度是3

这是错误的,我该如何解决?

2 个答案:

答案 0 :(得分:1)

您需要使用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;
}

答案 1 :(得分:0)

尝试此selectedIndex是您开始使用的index,此外,添加检查leftright上是否有值

  Integer[] leftValues = Arrays.copyOfRange(numArray, 0, selectedIndex);
  Integer[] rightValues = Arrays.copyOfRange(numArray, selectedIndex+1,numArray.length);
  List<Integer> leftList = Arrays.asList(leftValues);
  List<Integer> rightList = Arrays.asList(rightValues);
  int leftMax = 
  leftList.stream().collect(Collectors.summarizingInt(Integer::intValue)).getMax();
  int rightMax= 
  rightList.stream().collect(Collectors.summarizingInt(Integer::intValue)).getMax();

如果您希望使用int array而不是Integer来使用完整示例的另一种方式:

  int[] spam = new int[] { 1, 2, 3,5,4,7,1,2,9,12 };
  int[] leftValues = Arrays.copyOfRange(spam, 0, 7);
  int[] rightValues = Arrays.copyOfRange(spam, 7+1,spam.length );
  List<Integer> leftList = Arrays.stream(leftValues).boxed().collect(Collectors.toList());
  List<Integer> rightList = Arrays.stream(rightValues).boxed().collect(Collectors.toList());
  int leftMax = leftList.stream().collect(Collectors.summarizingInt(Integer::intValue)).getMax();
  int rightMax= 
         rightList.stream().collect(Collectors.summarizingInt(Integer::intValue)).getMax();