ArrayList排序最长的序列

时间:2013-09-25 21:23:57

标签: java

要求任何人为我解决这个问题,我只需要一点点推动,因为我没有从根本上知道从哪里开始。我所知道的是,我应该在此实现集合并进行排序。

编写一个方法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
}

4 个答案:

答案 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时会重置计数器。