我正在我的类中编写一个名为ArrayIntList的方法。该类有两个字段,一个int和int数组,表示数组的长度。我在这里忽略了构造函数,并直接转到我遇到问题的方法。我试图编写的方法是longestSortedSequence,它将返回列表中最长的排序整数序列的int类型。例如,这将返回
[1, 3, 5, 2, 9, 7, -3, 0, 42, 308, 17] ---> 4,
[1, 2, 3, 4, 0, 19, 1, 1, 2, 2, 3, 3]----> 6
以下代码适用于第一种情况,但在第二种情况下失败,我无法理解原因。
public class ArrayIntList {
private int[] elementData;
private int size;
public int longestSortedSequence() {
//this stores the longest sequence possible
int max_count=0;
//this stores the counts till not sorted sequence is encountered
// and is flushed to zero before the next counting begins
int count=0;
int i=0;
while(i<size-1) {
if (elementData[i]<=elementData[i+1]){
count++;
}
else {
max_count=Math.max(max_count,count+1);
count=0;
}
i++;
}
return max_count;
}
任何帮助都会非常感激吗? 感谢
答案 0 :(得分:2)
如果您检测到序列的结尾(max_count
分支),则只分配else
。
如果你的第二个例子,最长的序列在最后(6),但你的代码永远不会有机会分配给max_count
。
将作业从max_count
移出else
。然后,您的if
也已经投放,因此count
已经增加,与{{1}进行比较时,无需将1
添加到count
}}
答案 1 :(得分:1)
更改了代码:
while(i<size-1) {
if (elementData[i]<=elementData[i+1]){
count++;
}
else {
max_count=Math.max(max_count,count+1);
count=0;
}
i++;
}
// added following 1 line.
max_count=Math.max(max_count,count+1);
return max_count;