博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
区间统计【美团18.09.06校招笔试】
阅读量:5901 次
发布时间:2019-06-19

本文共 3335 字,大约阅读时间需要 11 分钟。

image

思路:

  1. 简单点的,暴力就完事了,但是会超时
  2. 利用滑动窗口思想,利用List模拟一个窗口,在窗口中利用map存储数字出现的次数,每次窗口移动遍历map判断是否有数出现的次数达到阈值t
//暴力法 只能通过82% public static void main(String[] args) {        Scanner in = new Scanner(System.in);        while (in.hasNext()) {            Map
map = new TreeMap<>(); int res = 0; int n = in.nextInt(); int k = in.nextInt(); int t = in.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = in.nextInt(); } for (int i = 0, j = i + k - 1; j < n; i++, j++) { for (int p = i; p <= j; p++) { if (map.containsKey(arr[p])) { map.put(arr[p], map.get(arr[p]) + 1); } else { map.put(arr[p], 1); } } if (isT(map, t)) { res++; } map.clear(); } System.out.println(res); } } private static boolean isT(Map
map,int t) { for (Integer key : map.keySet()) { int value = map.get(key); if (value >= t) { return true; } } return false; } //滑动窗口法public class Main { static class Node { int index; int value; Node(int index, int value) { this.index = index; this.value = value; } } public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int n = in.nextInt(); int k = in.nextInt(); int t = in.nextInt(); int[] arr = new int[n]; for (int i = 0; i < arr.length; i++) { arr[i] = in.nextInt(); } //用一个List来模拟窗口 LinkedList
list = new LinkedList<>(); //value:times利用map来统计每个value出现的次数 HashMap
map = new HashMap<>(); int end = 0; int res = 0;//统计次数 while (end < arr.length) { if (list.size() < k) { list.add(new Node(end, arr[end])); addNode(map,arr,end); end++; } if (list.size() == k) { //统计出现的次数有没有大于t int temptimes = 0; for (Map.Entry
entry : map.entrySet()) { temptimes = Math.max(temptimes, entry.getValue()); } if (temptimes >= t) { res++; } //弹出list最前面的值 Node node = list.poll(); if (map.get(node.value) == 1) { map.remove(node.value); }else { //出现次数-1 map.put(node.value, map.get(node.value) - 1); } } } System.out.println(res); } } private static void addNode(HashMap
map,int arr[],int end) { if (!map.containsKey(arr[end])) { map.put(arr[end], 1); }else { map.put(arr[end], map.get(arr[end])+1); } }}

转载于:https://www.cnblogs.com/keeya/p/9602726.html

你可能感兴趣的文章
Java 数组在内存中的结构
查看>>
《关爱码农成长计划》第一期报告
查看>>
学习进度表 04
查看>>
谈谈javascript中的prototype与继承
查看>>
时序约束优先级_Vivado工程经验与各种时序约束技巧分享
查看>>
minio 并发数_MinIO 参数解析与限制
查看>>
flash back mysql_mysqlbinlog flashback 使用最佳实践
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
配置ORACLE 11g绿色版客户端和PLSQL远程连接环境
查看>>
ASP.NET中 DataList(数据列表)的使用前台绑定
查看>>
Linux学习之CentOS(八)--Linux系统的分区概念
查看>>
System.Func<>与System.Action<>
查看>>
asp.net开源CMS推荐
查看>>
csharp skype send message in winform
查看>>
MMORPG 游戏服务器端设计--转载
查看>>
HDFS dfsclient写文件过程 源码分析
查看>>
ubuntu下安装libxml2
查看>>
nginx_lua_waf安装测试
查看>>
WinForm窗体缩放动画
查看>>