zoukankan      html  css  js  c++  java
  • Java实现第九届蓝桥杯阶乘位数

    阶乘位数

    题目描述
    小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:

    ts id

    表示在ts时刻编号id的帖子收到一个"赞"。

    现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。

    具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。

    给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。

    【输入格式】
    第一行包含三个整数N、D和K。
    以下N行每行一条日志,包含两个整数ts和id。

    对于50%的数据,1 <= K <= N <= 1000
    对于100%的数据,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000

    【输出格式】
    按从小到大的顺序输出热帖id。每个id一行。

    【输入样例】
    7 10 2
    0 1
    0 10
    10 10
    10 1
    9 1
    100 3
    100 3

    【输出样例】
    1
    3

    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗 < 1000ms

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    不要使用package语句。不要使用jdk1.7及以上版本的特性。
    主类的名字必须是:Main,否则按无效代码处理。

    import java.util.Arrays;
    import java.util.Scanner;
    class Main
    {
        public static void main(String args[])
        {
            int n,d,k;  //输入的N行每行一条日志,包含两个整数ts 和id。   
            Scanner sc=new Scanner(System.in);
            n=sc.nextInt();
            d=sc.nextInt();
            k=sc.nextInt();
            ClickHot arr[]=new ClickHot[n];
            for(int i=0;i<n;i++)
                arr[i]=new ClickHot(sc.nextInt(),sc.nextInt()); //存放每组数字
            Arrays.sort(arr); //对其进行排序
            int parentId=arr[0].id; //先拿到第一个id
            int flag=0; //设置一个标志
            for(int i=0;i<n;i++)
            {
                if(i+k-1<n&&arr[i+k-1].id==parentId&&arr[i+k-1].ts-arr[i].ts<d&&flag==0) 
                    // 后一个的id与(前一个id值相比较):(这里需要说明一下,这个id就是我所得到的变量parentId的值)
                {
                    System.out.println(parentId); //输出这个id 因为题目中只要求输出在同一个时间段有两个赞即可
                    flag=1;//这步设置变量,当后面来相同的,但是我不需要输出了,因为两个已经够了
                }
                else if(arr[i].id!=parentId) //这步是如果我不相同id值,那么我就把这个当前的id用我现在i数组中对应的id取代
                {
                    parentId=arr[i].id; //把先前的id替换
                    flag=0; //重新设置标志
                    i=i-1; //因为我把上面一个设置了,此时我需要向上减一,然后再做比较,这样相当于我开始时候i不做变换没我把该取代的值取代掉
                }
            }
        }
    }
    class ClickHot implements Comparable<ClickHot>  //创建一个ClickHot类留存放两个每次的两个数字  一个是 ts 是td
    {
        int ts,id;
        ClickHot(int a,int b)  //两个变量
        {
            this.ts=a;
            this.id=b;
        }
     
        @Override
        public int compareTo(ClickHot o) {
            if(id==o.id)  //先对id做比较其次id相同对ts做比较
                return ts-o.ts;
            else
                return id-o.id;
        }
     
    }
    
  • 相关阅读:
    LC.225. Implement Stack using Queues(using two queues)
    LC.232. Implement Queue using Stacks(use two stacks)
    sort numbers with two stacks(many duplicates)
    LC.154. Find Minimum in Rotated Sorted Array II
    LC.81. Search in Rotated Sorted Array II
    LC.35.Search Insert Position
    前后端分离:(一)
    Redis基本使用(一)
    GIT篇章(二)
    GIT篇章(一)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947717.html
Copyright © 2011-2022 走看看