6

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

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

4 回答 4

3

迭代数组,如果您处理的下一个元素大于最后一个元素,则增加计数器变量。

如果下一个元素较小,或者到达数组的末尾,则存储当前计数器值(如果其大于当前存储的最大值)并将计数器变量重置为 0。

于 2013-09-25T21:32:05.703 回答
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为按排序顺序的每个元素添加。

当序列停止排序时,它会检查当前序列是否比迄今为止最长的序列长度长。如果是,你就有了新的最长序列。

于 2013-09-25T21:32:16.423 回答
1

您是否考虑过 for 循环和 if else 语句?我希望这不会泄露它。一次想一个元素。

于 2013-09-25T21:26:05.277 回答
0

循环遍历您的数组并将i元素与i+1元素进行比较。做一个计数器。当i小于i+1时计数器递增,当i大于时i+1重置计数器。

于 2013-09-25T21:31:51.420 回答