當(dāng)前位置:
首頁(yè) >
poj3320Jessica's Reading Problem—尺取法(java)
發(fā)布時(shí)間:2025/3/20
31
豆豆
生活随笔
收集整理的這篇文章主要介紹了
poj3320Jessica's Reading Problem—尺取法(java)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接
大意:給序列數(shù)字,找出最小子序列,包含所有的元素類型。例如
5
1 8 8 8 1
輸出2,因?yàn)? 8就包含了所有元素
思路:尺取法
- 這個(gè)和裸的尺取優(yōu)點(diǎn)不同的是,他需要一個(gè)map來(lái)維護(hù)判斷而不是sum維護(hù)判斷。在右側(cè)從左向右遍歷的同時(shí),用一個(gè)map<Integer,Integer>來(lái)維護(hù)元素,map.keyset()就可以判斷是否包含所有元素,數(shù)值用來(lái)判斷改元素出現(xiàn)次數(shù)是否應(yīng)移除改元素—左側(cè)標(biāo)記右移的時(shí)候判斷。
- 所以具體的解題方法是:left,right=0,right向右遍歷,向map中添加元素(數(shù)量等信息),如果包含了所有元素,那么left右移,對(duì)應(yīng)改變map,一直到map不包含所有為止。然后右側(cè)繼續(xù)—
附上代碼:
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 自動(dòng)生成的方法存根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();}}- 如果對(duì)后端、爬蟲、數(shù)據(jù)結(jié)構(gòu)算法等感性趣歡迎關(guān)注我的個(gè)人公眾號(hào)交流:bigsai
總結(jié)
以上是生活随笔為你收集整理的poj3320Jessica's Reading Problem—尺取法(java)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hdu1181变形课dfs/bfs/并查
- 下一篇: poj2566Bound Found尺取