题解 | #机器翻译#

机器翻译

https://ac.nowcoder.com/acm/problem/16589

import java.util.*;
public class Main{
    public static void main(String[] srgs){
//      queue和hashset同时记录数据,queue记录先后顺序,set记录内存里是否已经存在
        Scanner sc=new Scanner(System.in);
        int memSize=sc.nextInt();
        int dicSize=sc.nextInt();
        int a=0;//读取进的数
        int res=0;//查找的次数
        Queue<Integer> queue=new LinkedList<>();
        HashSet<Integer> set=new HashSet<>();
        while(sc.hasNextInt()){
            a=sc.nextInt();
            if(set.contains(a)){
                continue;
            }
            else{
                res++;//查询次数+1
                if(set.size()<memSize){
                    //如果内存没满,直接加入
                    set.add(a);
                    queue.add(a);//set和queue都要加入
                }
                else{
                    int out=queue.poll();//queue记录最先进入的,让它出队列
                    set.remove(out);//set里也出
                    set.add(a);
                    queue.add(a);
                }
            }
        }
        System.out.println(res);
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务