poj3320Jessica's Reading Problem—尺取法(java)

简介: 这个和裸的尺取优点不同的是,他需要一个map来维护判断而不是sum维护判断。在右侧从左向右遍历的同时,用一个map<Integer,Integer>来维护元素,map.keyset()就可以判断是否包含所有元素,数值用来判断改元素出现次数是否应移除改元素—左侧标记右移的时候判断。

大意:



给序列数字,找出最小子序列,包含所有的元素类型。例如


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();
  }
}
目录
相关文章
|
6月前
|
Java 编译器
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
314 0
java.lang.Error: Unresolved compilation problem: The type List is not generic; it cannot be parame
java.lang.Error: Unresolved compilation problem: The type List is not generic; it cannot be parame
|
Cloud Native Java Go
解决 Spring Boot 和 Gradle Java 版本兼容性问题:A problem occurred configuring root project ‘demo1‘. > Could n
解决 Spring Boot 和 Gradle Java 版本兼容性问题:A problem occurred configuring root project ‘demo1‘. > Could n
890 0
|
Java 编译器
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
1375 0
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
|
Java 应用服务中间件 编译器
Java: Unresolved compilation problem的解决方法
Java: Unresolved compilation problem的解决方法
Java: Unresolved compilation problem的解决方法
HDU-1002,A + B Problem II(Java大数)
HDU-1002,A + B Problem II(Java大数)
|
Java 物联网 Go
洛谷 P1001 A+B Problem (java实现)
洛谷 P1001 A+B Problem (java实现)
|
算法 Java 索引
Josephus Problem的详细算法及其Python, Java语言的实现
  笔者昨天看电视,偶尔看到一集讲述古罗马人与犹太人的战争——马萨达战争,深为震撼,有兴趣的同学可以移步:http://finance.
1353 0
|
Java Android开发
Exception in thread "main" java.lang.Error: Unresolved compilation problem
初学java,使用eclipse编译时,可能会遇到如下图所示的编译错误(Exception in thread "main" java.lang.Error: Unresolved compilation problem): 错误的原因是因为代码中没有指定package,加上“package elementary;”后再编译即OK。
4755 0
|
3天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
71 38