解锁 java中map技能~附上AC代码。
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.Map;
import java.util.Set;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
while(in.nextToken() != StreamTokenizer.TT_EOF){
int n = (int)in.nval;
Set<Integer> set = new TreeSet<Integer>();
int[] dp = new int[n];
for(int j = 0; j<n; j++){
in.nextToken();
dp[j] = (int)in.nval;
set.add(dp[j]);
}
int total = set.size();
int res = n+1;
int s1 = 0;
int s2 = 0;
int sum = 0;
int cnt = 0;
Set<Integer> set2 = new TreeSet<Integer>();
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(;;){
while(s1<n && cnt<total){
if(map.containsKey(dp[s1])){
map.put(dp[s1], map.get(dp[s1])+1);
}
else {
cnt++;
map.put(dp[s1], 1);
}
s1++;
}
if(cnt < total) break;
res = Math.min(s1-s2, res);
if(map.get(dp[s2]).equals(1)) {
cnt--;
map.remove(dp[s2]);
}
else map.put(dp[s2], map.get(dp[s2])-1);
s2++;
}
out.println(res);
out.flush();
}//while
}
}