题目链接

大意:给序列数字,找出最小子序列,包含所有的元素类型。例如
5
1 8 8 8 1
输出2,因为1 8就包含了所有元素

思路:尺取法

  • 这个和裸的尺取优点不同的是,他需要一个map来维护判断而不是sum维护判断。在右侧从左向右遍历的同时,用一个map<Integer,Integer>来维护元素,map.keyset()就可以判断是否包含所有元素,数值用来判断改元素出现次数是否应移除改元素—左侧标记右移的时候判断。
  • 所以具体的解题方法是:left,right=0,right向右遍历,向map中添加元素(数量等信息),如果包含了所有元素,那么left右移,对应改变map,一直到map不包含所有为止。然后右侧继续—

附上代码:

package 暴力;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;public class poj3320 {public static void main(String[] args) throws IOException {// TODO 自动生成的方法存根StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));in.nextToken();int p=(int)in.nval;int value[]=new int[p];Map<Integer, Integer>map=new HashMap<Integer,Integer>();Set<Integer>set=new HashSet<Integer>();for(int i=0;i<p;i++){in.nextToken();value[i]=(int)in.nval;set.add(value[i]);}int l=0;int len=p-1;map.put(value[0], 1);for(int i=1;i<p;i++){if(map.containsKey(value[i])) {map.put(value[i], map.get(value[i])+1);}else map.put(value[i],1);while(map.keySet().size()==set.size()) {if(i-l<=len) {len=i-l;}if(map.get(value[l])>1) {map.put(value[l], map.get(value[l])-1);}else map.remove(value[l]);if(l<i)l++;}}out.println(len+1);out.flush();}}
  • 如果对后端、爬虫、数据结构算法等感性趣欢迎关注我的个人公众号交流:bigsai

poj3320Jessica's Reading Problem—尺取法(java)相关推荐

  1. POJ3320 Jessica's Reading Problem 尺取法

    Jessica's Reading Problem. Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22716 Accepted ...

  2. POJ 3320 Jessica's Reading Problem (尺取)

    Description 给出一段长度为\(n\)的整数序列,求包含所有出现过的数的连续区间的最小长度. Input 第一行给出序列长度\(n\),第二行给出\(n\)个整数,表示这个序列.\(n \l ...

  3. 尺取法 POJ 3320 Jessica's Reading Problem

    题目传送门 1 /* 2 尺取法:先求出不同知识点的总个数tot,然后以获得知识点的个数作为界限, 更新最小值 3 */ 4 #include <cstdio> 5 #include &l ...

  4. Jessica‘s Reading Problem(尺取法)

    Jessica's Reading Problem (尺取法) Jessica's a very lovely girl wooed by lots of boys. Recently she has ...

  5. poj2566Bound Found尺取法进阶(java)

    题目链接: 这个尺取法的思想挺好的,如果第一次做尺取法题,不妨看下尺取法入门题. 题目大意: 多组测试数据(0,0)截止. 每组数据输入 n,k(n数字个数,k询问次数) 下一行n个数表示序列. 接下 ...

  6. poj3061尺取法/前缀和 二分(java)

    今天遇到这题因为以前没见到过,当时就是想着应该有着一个很简单的方法可以过但是奈何就是没思路.后来看了别人思路写了下来.学习了尺取法 poj3061 题目介绍: Description A sequen ...

  7. 【POJ - 3320 】Jessica's Reading Problem (尺取,哈希)

    题干: Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam i ...

  8. 【常用技巧精选】尺取法

    整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...

  9. hdu 5178(尺取法)

    pairs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem De ...

最新文章

  1. 体制内必须要懂的道理77条
  2. 零起点学习WPF之《WPF揭秘》读书笔记(7)——第三章 变更通知
  3. BZOJ-1800 飞行棋 数学+乱搞
  4. pyqt 获取 UI 中组件_一起学Vue:UI框架(elementui)
  5. php记录邮件发送,有关php邮件发送一点记录
  6. Tensorflow中使用tfrecord,队列方式读取数据
  7. 第九周LINUX 学习笔记
  8. Android学习之路十三:BroadCast
  9. java 文件大小,如何在Java中获取文件大小
  10. 人脸验证(五)--NormFace
  11. Ubuntu 解压 压缩.tar.gz 和 .gz 文件
  12. poj 2502 Subway dijkstra基础 !!!!入门题
  13. 软件项目管理实用教程(人民邮电出版)第二章课后习题
  14. acunetix导出html,关于Acunetix v11 WebUI下不得不说的事情!
  15. 计算机职业规划500字中专,计算机中专生职业规划范文500字中专生职业生涯规划书范文.doc...
  16. JSP和Thymeleaf
  17. 如何用python进行回归分析_如何用python进行回归分析
  18. Vue高频面试问题(含答案),面试官直呼好家伙~
  19. 分布式系统设计模式 - 预写日志(Write Ahead Log)
  20. 智慧农业智能节水灌溉 机井灌溉控制器

热门文章

  1. 基于SEAL库实现PSI-报错实录1
  2. [密码学] 破解维吉尼亚密码
  3. C++的几种遍历形式
  4. linux kernel中的cmdline的详细介绍
  5. Django简介Django 各个环境下的安装
  6. WIN32多线程抢红包练习
  7. 【web安全】Spring boot heapdump获取敏感信息
  8. sqlmap参数说明
  9. 005 Android之数据存储
  10. 160个Crackme047