java的dequeue_[HackerRank]Java的雙向佇列(Java Dequeue)
題目描述
在電腦科學的領域,一個雙向佇列(double-ended queue, dequeue, deque)是一種佇列的抽象資料型態,雙向佇列中的每個元素都可以在佇列的最前端或最後端被新增移除。
Deque介面被許多集合類別所實作,像是LinkedList和ArrayDeque。舉例來說,雙向佇列的物件可以用以下方式宣告與實體化: Deque deque = new LinkedList<>();
或 Deque deque = new ArrayDeque<>();
在這個題目中,您將會得到N個整數。您需要從任意大小為M的連續子陣列中找出其中最大的不同整數的數量。
原題網址
輸入格式
輸入第一行包含N和M兩個整數,分別表示整數的數量和子陣列的大小,範圍都在1到100000之間(包含1和100000),M小於等於N。接下來的一行中,包含N個用空格分隔的整數,範圍在0到10000000之間(包含1和10000000)。
輸出格式
輸出所有子陣列中,最大的不重複整數數量。
範例輸入 6 3
5 3 5 2 3 2
範例輸出 3
額外解釋
所有子陣列如下:
s1=⟨5,3,5⟩,有2個不重複的整數。
s2=⟨3,5,2⟩,有3個不重複的整數。
s3=⟨5,2,3⟩,有3個不重複的整數。
s4=⟨2,3,2⟩,有2個不重複的整數。
所以最大不重複整數數量為3。
解題概念
一邊讀入整數一邊將整數存入Dequeue中,並且使用一個HashMap物件來儲存整數出現的次數。當Dequeue的數量大於或是等於m的時候,要先將最先放進Dequeue的元素取出,並且更改HashMap物件的計數內容,才可以再將整數存入Dequeue中。在每次讀入整數後更改HashMap物件的同時,順便去記錄目前出現次數的最大值。最後再將最大值輸出即可。
參考答案 import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashMap;
import java.util.Scanner;
public class test {
public static void main(final String[] args) {
final Scanner in = new Scanner(System.in);
final Deque deque = new ArrayDeque<>();
final int n = in.nextInt();
final int m = in.nextInt();
int maxUnique = 0;
int uniqueSize = 0;
final HashMap counterMap = new HashMap<>();
for (int i = 0; i < n; ++i) {
final int num = in.nextInt();
if (deque.size() >= m) {
final Integer pollNum = deque.pollLast();
final int count = counterMap.get(pollNum);
if (count == 1) {
counterMap.remove(pollNum);
--uniqueSize;
} else {
counterMap.put(pollNum, count - 1);
}
}
deque.addFirst(num);
if (counterMap.containsKey(num)) {
counterMap.put(num, counterMap.get(num) + 1);
} else {
counterMap.put(num, 1);
++uniqueSize;
if (uniqueSize > maxUnique) {
maxUnique = uniqueSize;
}
}
}
System.out.println(maxUnique);
}
}
java的dequeue_[HackerRank]Java的雙向佇列(Java Dequeue)相关推荐
- java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用
在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码.而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI( ...
- java date 加一天_Java 8中的时间JAVA成长之路
Java 8新增了LocalDate和LocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了. java.util.Date月份从0开始 ...
- java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !
" 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...
- java书籍_Java程序员必看的 13 本 Java 书籍!
原文:Java程序员必看的 13 本 Java 书籍! 作者: java技术栈 关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,J ...
- java中execution的作用_一文初步了解Java虚拟机
大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...
- php转java知乎_php程序员来谈谈php和java
本人一直以来从事PHP互联网开发,之前用过Thinkphp,不过最近几年一直用Yii2.最近由于公司要开发一套OA系统,所以开始用JAVA在做(php开源的工作流引擎真的太烂,自己开发一套又没时间), ...
- java.lang类在电脑哪个位置_Java中的java.lang.Class API 详解
且将新火试新茶,诗酒趁年华. 概述 Class是一个位于java.lang包下面的一个类,在Java中每个类实例都有对应的Class对象.类对象是由Java虚拟机(JVM)自动构造的. Class类的 ...
- java语言用什么编程_使用什么编程语言开发Java?
The Java Language is a language specification – you don't write a language in a language, it's a spe ...
- Java框架JSON-RPC项目demo代码实战 + JAVA WEB配置虚拟目录(转自21天java web开发)
Java框架JSON-RPC项目demo代码实战 备注 JAVA WEB配置虚拟目录(转自21天java web开发) https://blog.csdn.net/wjxbj/article/det ...
最新文章
- 在WINDOWS2008 Server 中创建NFS服务器,使用LINUX的MOUNT命令去加载网络盘
- 中国照明市场运营现状及发展前景分析报告2021年版
- php 获取http headers
- 深入到系统组件是否白盒测试_白盒测试
- networkX如何读取存储图的二进制.dat文件
- DIV+CSS专题:十天学会DIV+CSS
- Linux下SVN服务器的搭建
- 在状态栏中显示鼠标位置坐标
- RabbitMQ 最新版安装 (Linux环境)
- ML《决策树(二)C4.5》
- php对象不公用属性赋值,php 框架 Model 公用的问题
- resnet18 参数解读
- 递归法:杨辉三角,计算第m层的第n个系数
- httpclient4.x 中文版帮助文档,最新官方版翻译版(第一章 下)
- SolidWorks零件图转工程图
- Unity 3D的常用快捷键
- JavaWeb学习--课程设计《小米商城》
- 前端可以用到的渐变色代码
- 家禽也能有身份,XFS在畜牧业落地
- python中Could not find module “...atari_py\ale_interface\ale_c.dll‘ (or one of its dependence)