思路:双指针
1.一个指针start指向当前不重复队列的头,一个指针end指向当前不重复队列的尾部。
1)若arr[end]与当前队列重复了,则start向后移动一位,并把arr[start]从当前队列删除。
2)不重复
1)重新计算最大长度maxlen
2)end++;
3)把arr[end]加入到当前队列中
注意:队列的作用
1)一个装载当前不重复数的链表
2)使用contains()方法判断arr[end]是否与当前队列重复。
public int maxLength (int[] arr) {
// write code here
int start=0;
int end=1;
int maxlen=1;
LinkedList<Integer> list=new LinkedList<>();
list.add(arr[0]);
while(end<arr.length){
if(!list.contains(arr[end])){
list.addLast(arr[end]);
maxlen=(end-start+1)>maxlen?(end-start+1):maxlen;
end++;
}
else{
list.removeFirst();
start++;
}
}
return maxlen;
}
京公网安备 11010502036488号