本题使用队列来实现,容易理解,这个模板可以适用于求最长无重复的子串。
思路分析:把元素不停的加入到队列中,如果有相同的元素,就把队首的元素移除,这样我们就可以保证队列中永远都没有重复的元素。维持一个最大值返回即可
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; } }