日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj3320Jessica's Reading Problem—尺取法(java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接

大意:給序列數字,找出最小子序列,包含所有的元素類型。例如
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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。