我必须写一个计算最高和最高的方法
当前索引的正确高度。
假设我们有一个数组{1,4,7,3,2},因此对于索引1(高度4)-maxLeftHeight=1
,maxRightHeight=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
这是错误的,我该如何解决?
答案 0 :(得分:1)
您需要使用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;
}
答案 1 :(得分:0)
尝试此selectedIndex
是您开始使用的index
,此外,添加检查left
或right
上是否有值
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();