201812-2小明放学( 三 )

< n; i++ ) {for ( int j = 0; j < m; j++ ) {nums[i][j] = in.nextInt();}}//优化输出StringBuilder sb = new StringBuilder();for(int i=m-1;i>=0;i--){for(int j=0;j
-1门禁系统
问题描述
涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况 。每位读者有一个编号,每条记录用读者的编号来表示 。给出读者的来访记录,请问每一条记录中的读者是第几次出现 。
输入格式
输入的第一行包含一个整数n,表示涛涛的记录条数 。
第二行包含n个整数,依次表示涛涛的记录中每位读者的编号 。
输出格式
输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现 。
样例输入
1 2 1 1 3
样例输出
1 1 2 3 1
评测用例规模与约定
1≤n≤1,000,读者的编号为不超过n的正整数 。
public class Main {public static void main(String[] args){Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();Map map = new HashMap<>();while (n --!=0){int m = scanner.nextInt();if(!map.containsKey(m)){map.put(m,1);System.out.print(1+" ");}else {map.put(m,map.get(m)+1);System.out.print(map.get(m)+" ");}}}}
水题啦!很简单,五分钟完事儿!
-1期末预测之安全指数
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main {public static void main(String [] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int n = Integer.parseInt(br.readLine());String[] temp;int sum = 0;for(int i=0;i
-2期末预测值最佳阈值
一顿操作猛如虎,一朝提交超时了
(泪如雨下.jpg)
失败总结:
暴力嵌套循环O(N^2)
是七十分,应该是由于m的上限在10^5次方吧,太大了所以双层循环会超时 。
再来梳理一遍这个题目的思路:
选阈值是在y[i]里面选;如果安全指数y大于等于本次的阈值,且不挂科;或是安全指数y小于本次的阈值,且挂科,这两种情况就是预测正确了;我们就是要找到预测正确的次数多的对应的阈值,并且正确次数相同时候取较大的那个;
考虑如何优化:
思路
下面贴的是大佬的代码,原文见链接:
JAVA CCF--2 期末预测之最佳阈值_不断奔跑-CSDN博客_期末预测之最佳阈值java
不得不说很巧妙了,直接假设未挂科的都是预测对的,然后加上在本轮选定的阈值之前挂科的,减去在本轮选定的阈值之前没挂科的,就是正确的次数!!!!!我直接跪了,太巧妙了!
import java.util.*;public class Main {public static void main(String [] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();//预测正确最多的个数;结果;当前预测成功的个数int max = -1,ans = -1,cur = 0;// 存储所有数据,按安全指数升序// 使用优先级队列实现升序PriorityQueue p = new PriorityQueue<>(new Comparator() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[0]-o2[0];}});//利用set去重Set set = new TreeSet<>();//输入while (n-- != 0){int[] temp = new int[]{in.nextInt(),in.nextInt()};p.add(temp);set.add(temp[0]);// 累计没挂科的人数,后面遍历遇到直接--即可 。// 等同于 所有没挂科人数 - 当前遍历到的没挂科人数// 0挂科,1未挂科if (temp[1]==1) {cur++;}}//set按安全指数升序遍历for(int next: set){//peek(): 获取但不删除队首元素while (!p.isEmpty()&&p.peek()[0]=max){ans=next;max=cur;}}System.out.println(ans);}}
类在Java1.5中引入 。是基于优先堆的一个无界队列,这个优先队列中的元素可以默认自然排序或者通过提供的(比较器)在队列实例化的时排序 。要求使用Java 和接口给对象排序,并且在排序时会按照优先级处理其中的元素 。