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,否则按无效代码处理。

    package 第七次模拟;
    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Demo12日志统计 {
    	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++) { 
    			int time = sc.nextInt();
    			int id = sc.nextInt();
    			arr[i] = new ClickHot(time, id); // 存放每组数字
    		}
    		Arrays.sort(arr); // 对其进行排序
    		int parentId = arr[0].id; // 先拿到第一个id
    		boolean flag =false; // 设置一个标志
    		for (int i = 0; i < n; i++) {
    			// 我当前得id如果有k个赞得话,就是热帖
    			// 当前位置和以后的k个位置上都是此id,就有k个赞
    			// 并且时间差小于d,并且没有被输出过
    			if (i + k - 1 < n && arr[i + k - 1].id == parentId && arr[i + k - 1].ts - arr[i].ts < d && !flag  )
    
    			{
    				System.out.println(parentId); // 输出这个id 因为题目中只要求输出在同一个时间段有两个赞即可
    				flag = true;// 这步设置变量,当后面来相同的,但是我不需要输出了,因为两个已经够了
    			} else if (arr[i].id != parentId) // 这步是如果我不相同id值,那么我就把这个当前的id用我现在i数组中对应的id取代
    			{
    				parentId = arr[i].id; // 把先前的id替换
    				flag = false; // 重新设置标志
    				i = i - 1; // 因为我把上面一个设置了,此时我需要向上减一,然后再做比较,这样相当于我开始时候i不做变换没我把该取代的值取代掉
    			}
    		}
    	}
    }
    
    class ClickHot implements Comparable<ClickHot> // 创建一个ClickHot类留存放两个每次的两个数字 一个是
    												// ts 是td
    {
    	int ts, id;
    
    	ClickHot(int ts, int id) // 两个变量
    	{
    		this.ts = ts;
    		this.id = id;
    	}
    
    	@Override
    	public int compareTo(ClickHot o) {
    		if (id == o.id) // 先对id做比较其次id相同对ts做比较
    			return ts - o.ts;
    		else
    			return id - o.id;
    	}
    
    }
    
    
  • 相关阅读:
    正则表达式(二)
    HTTP状态码
    ajax(局部刷新技术)
    day03<JS对象&函数>
    day02<CSS&JavaScript>
    day01<HTML等>
    总结:HTML表单的应用
    总结:HTML的框架结构
    九、浮动与定位
    八、CSS高级技巧
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946655.html
Copyright © 2011-2022 走看看