本题使用队列来实现,容易理解,这个模板可以适用于求最长无重复的子串。
思路分析:把元素不停的加入到队列中,如果有相同的元素,就把队首的元素移除,这样我们就可以保证队列中永远都没有重复的元素。维持一个最大值返回即可
1.创建队列(老是记不住)
Queue<Integer> queue=new LinkedList<>();2.一些方法的区别
offer,add 区别:
一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。
这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。
poll,remove 区别:
remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。
import java.util.*;
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
// write code here
Queue<Integer> queue=new LinkedList<>();//用链表实现队列
int max=0;//维护队列的最大值
for(int c:arr){
while(queue.contains(c)){
queue.poll();//如果有重复的,队头出队
}
queue.add(c);//添加到队尾
max=Math.max(max,queue.size());
}
return max;
}
}

京公网安备 11010502036488号