最近的请求次数(java)

最近的请求次数(java),第1张

问题描述:

样例如下:

代码如下:两种思路

import java.util.*;
public class RecentCounter {
    //最近的请求次数
    //方法一
    List<Integer> list=new LinkedList<>();
    HashSet<Integer> hashSet=new HashSet<>();//利用hashset来加速查重
    int count=0;
    public RecentCounter() {//构造器
      this.count=0;
    }
    public int ping(int t) {
      this.list.add(t);
      hashSet.add(t);
      if (t-3000<=list.get(0)) return list.size();//剪枝
      if (list.size()>2)
      if (t-3000>list.get(list.size()-2)) return 1;
      if (!hashSet.contains(t-3000))//包含与不包含的情况是不相同的
      return this.list.size()-binarySearch(this.list,0,this.list.size()-1,t-3000)-1;
      else return this.list.size()-binarySearch(this.list,0,this.list.size()-1,t-3000);
    }
    //二分查找来查找t-300 的位置
    public int binarySearch(List<Integer> list,int st,int end,int t){//此处t表示为t-300的含义
        while (st<=end){
            int mid=(st+end)>>1;
            if (list.get(mid)<t) st=mid+1;
            else if (list.get(mid)>t) end=mid-1;
            else return mid;
        }
        return end;
    }
    //方法二  使用队列的方法进行
    //首先 将元素加入到队列中 ,然后从头部不断地d出小于t-3000的元素即可,最后输出队列的长度
    class RecentCounter1 {
        Queue<Integer> queue;

        public RecentCounter1() {
            queue = new ArrayDeque<Integer>();
        }

        public int ping(int t) {
            queue.offer(t);
            while (queue.peek() < t - 3000) {
                queue.poll();
            }
            return queue.size();
        }
    }
    public static void main(String[] args) {
        RecentCounter recentCounter=new RecentCounter();
        Scanner scanner=new Scanner(System.in);
        while (true){
            System.out.println("请输入t");
            int t=scanner.nextInt();
            System.out.println("结果为   "+recentCounter.ping(t));
            System.out.println("list中的内容为   "+recentCounter.list.toString());
        }
    }

}

运行结果如下:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/877831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存