題目描述

在電腦科學的領域,一個雙向佇列(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)相关推荐

  1. java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用

    在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码.而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI( ...

  2. java date 加一天_Java 8中的时间JAVA成长之路

    Java 8新增了LocalDate和LocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了. java.util.Date月份从0开始 ...

  3. java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !

    " 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...

  4. java书籍_Java程序员必看的 13 本 Java 书籍!

    原文:Java程序员必看的 13 本 Java 书籍! 作者: java技术栈 关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,J ...

  5. java中execution的作用_一文初步了解Java虚拟机

    大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...

  6. php转java知乎_php程序员来谈谈php和java

    本人一直以来从事PHP互联网开发,之前用过Thinkphp,不过最近几年一直用Yii2.最近由于公司要开发一套OA系统,所以开始用JAVA在做(php开源的工作流引擎真的太烂,自己开发一套又没时间), ...

  7. java.lang类在电脑哪个位置_Java中的java.lang.Class API 详解

    且将新火试新茶,诗酒趁年华. 概述 Class是一个位于java.lang包下面的一个类,在Java中每个类实例都有对应的Class对象.类对象是由Java虚拟机(JVM)自动构造的. Class类的 ...

  8. java语言用什么编程_使用什么编程语言开发Java?

    The Java Language is a language specification – you don't write a language in a language, it's a spe ...

  9. 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 ...

最新文章

  1. 在WINDOWS2008 Server 中创建NFS服务器,使用LINUX的MOUNT命令去加载网络盘
  2. 中国照明市场运营现状及发展前景分析报告2021年版
  3. php 获取http headers
  4. 深入到系统组件是否白盒测试_白盒测试
  5. networkX如何读取存储图的二进制.dat文件
  6. DIV+CSS专题:十天学会DIV+CSS
  7. Linux下SVN服务器的搭建
  8. 在状态栏中显示鼠标位置坐标
  9. RabbitMQ 最新版安装 (Linux环境)
  10. ML《决策树(二)C4.5》
  11. php对象不公用属性赋值,php 框架 Model 公用的问题
  12. resnet18 参数解读
  13. 递归法:杨辉三角,计算第m层的第n个系数
  14. httpclient4.x 中文版帮助文档,最新官方版翻译版(第一章 下)
  15. SolidWorks零件图转工程图
  16. Unity 3D的常用快捷键
  17. JavaWeb学习--课程设计《小米商城》
  18. 前端可以用到的渐变色代码
  19. 家禽也能有身份,XFS在畜牧业落地
  20. python中Could not find module “...atari_py\ale_interface\ale_c.dll‘ (or one of its dependence)

热门文章

  1. 2021-10-07每日刷题打卡
  2. 计算机网络b站里谁讲得好,除了罗翔,B站还有多少神仙老师?
  3. 天珣内网安全管理系统为金融内网保安全(转)
  4. 【dc-dc】DC-DC恒流电源 车灯方案的应用
  5. springcloud豪猪
  6. 热电偶转4-20ma/NTC转0-5v信号转换模块,温度变送器
  7. 【Python】逆向爬虫-----模拟steam登录(RSA)
  8. 基于 K 均值聚类的径向基RBF神经网络优化(Matlab代码实现)
  9. 体验百度EasyEdge,畅快部署超多AI芯片
  10. 【python代码实现】决策树分类算法