数组中最长的平稳期.我做错了什么?

  • 本文关键字:错了 数组 java
  • 更新时间 :
  • 英文 :


我试图写一个算法来找到一个数组中最长的平台,如果有多个,它应该返回平台与最低的开始索引。如果没有,它应该返回-1作为开始,0作为长度。我想我已经解决了这个问题,但是我的代码仍然没有通过一些测试。

"plateau"是由较低值包围或位于数组边缘的相等值组成的一段。

数据输入:123.3.2123.3.2

数据输出:2 2

希望你有什么想法!

我不知道为什么我没有通过这些测试,它只是说失败(是的,这是一个分配),但我觉得我瞎了,试图调试工作代码。

private int[] findPlateau(int[] array){
int[] result = new int[2];
int currentStartVal = 0;
int currentStart = -1;
int currentLength = 0;
int maxStart = -1;
int maxLength = 0;
for (int i = 0; i < array.length; i++) {
if(array[i]==currentStartVal){
//Increase length
currentLength++;
currentStartVal = array[i];
}
else if(array[i]>currentStartVal){
//Start new length
currentStart = i;
currentLength = 1;
currentStartVal = array[i];
}
else if(array[i]<currentStartVal){
//End of length
if (currentLength > maxLength){
maxStart = currentStart;
maxLength = currentLength;
}
else if(currentLength == maxLength){
if(maxStart>currentStart){
maxStart = currentStart;
}
}
currentStart = -1;
currentStartVal = array[i];
currentLength = -1;
}

}
if (currentLength > maxLength) {
result[1] = currentLength;
result[0] = currentStart;
maxStart = currentStart;
maxLength = currentLength;
}

if(maxStart == -1 || maxLength <= 1){
result[0] = -1;
result[1] = 0;
}else{
result[0] = maxStart;
result[1] = maxLength;
}
return result;
}

有一些你没有做的事情可以帮助你解决这样的问题。

  • 你没有正确初始化你的值。是的,你给它们赋值,但这个值与输入无关。例如,以0值开始的数组将使用与以1值开始的数组不同的逻辑块,即使这两个逻辑块将通过不同的逻辑执行相同的操作。

修复这样的问题

currentStartVal = array[0];
currentLength = 0;

使逻辑始终扩展第一个元素的平台,将其扩展到长度为1。

最新更新