呼~除夕夜23:51分,希望明年能拿到阿里的offer,祝大家新年快乐。
一开始想复杂了,以为每次加入重复的单词需要将队列里单词的位置调整到最后一位哈哈哈,卡了半天。
直接维护队列存在哪些单词和单词的顺序(第一次放入的顺序,后续放入不进行更新)即可
java 代码
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int M = input.nextInt();//内存空间为M
int N = input.nextInt();//总单词数位N
LinkedList<Integer> queue = new LinkedList<>();
HashSet<Integer> exists = new HashSet<>();
int res = 0;
for(int i = 0 ; i < N ; i++){
int cur = input.nextInt();
if(exists.contains(cur)){
continue;
}
if(queue.size() == M){
int rem = queue.poll();
exists.remove(rem);
}
res++;
queue.offer(cur);
exists.add(cur);
}
System.out.println(res);
}
}
这个HashSet好像没有什么意义,contains()方法queue也能使用