题目描述
给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组。
思路-队列
返回递增的连续数组,思路是用队列,队列的特点是先进先出,遍历数组,看队列中是否含有,如果含有说明重复就移除,如果没有就填到到队列,然后返回队列中栈元素数组的最大。
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
Queue<Integer> queue = new LinkedList<>();//用链表实现队列,队列是先进先出的
int res = 0;
for(int c : arr){
while(queue.contains(c)){
queue.poll();//如果有重复,队头出队
}
//添加到队尾
queue.add(c);
res = Math.max(res,queue.size());
}
return res;
}
}