我不要求任何人为我解决这个问题,我只需要一点点推动,因为我没有从根本上知道从哪里开始。我所知道的是,我应该在此实现集合并进行排序。
编写一个方法longestSortedSequence,它返回整数列表中最长排序序列的长度。例如,如果名为list的变量存储以下值序列:
[1, 3, 5, 2, 9, 7, -3, 0, 42, 308, 17]
然后调用:list.longestSortedSequence()将返回值4,因为它是此列表中最长排序序列的长度(序列-3,0,42,308)。如果列表为空,则您的方法应返回0.请注意,对于非空列表,该方法将始终返回至少为1的值,因为任何单个元素都构成已排序的序列。
Assume you are adding to the ArrayIntList class with following fields:
public class ArrayIntList
{
private int[] elementData;
private int size;
// your code goes here
}
答案 0 :(得分:3)
迭代数组,如果您处理的下一个元素大于最后一个元素,则递增计数器变量。
如果下一个元素较小,或者到达数组的末尾,则存储当前计数器值(如果它大于当前存储的最大值)并将计数器变量重置为0。
答案 1 :(得分:2)
伪代码:
Variable X: first item of list
Variable Y: length of sequence (initial: 1)
Variable Z: max length occurred (initial: 0)
Loop over the list starting from 2nd index
if item is higher than X
set X to item
add 1 to Y
else
if Y is higher than Z
set Z to Y
end if
set X to item
set Y to 1
end if
End-Loop
此方法将在每次序列'重新启动'时重新启动计数器,也就是说:它不再排序。虽然列表已排序,但它只为排序顺序的每个元素添加1
。
当序列停止排序时,它检查当前序列是否长于目前为止最长的序列长度。如果是,您有新的最长序列。
答案 2 :(得分:1)
您是否考虑过for循环和if else语句?我希望这不会让它消失。一次想一个元素。
答案 3 :(得分:0)
循环遍历数组并将i
元素与i+1
元素进行比较。做一个柜台。虽然i
小于i+1
递增计数器,但i
大于i+1
时会重置计数器。