思路:双指针
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; }