第一行输入一个整数
代表数组中的元素数量。
第二行输入
个整数
代表初始数组。
第一行输出一个整数
代表满足条件的区间数量。
此后
行,每行输出两个整数
代表满足条件的区间。本题没有
,请按照
递增的顺序输出。
6 1 1 4 5 1 4
3 2 4 3 5 4 6
import java.util.*;
import java.io.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
// 注意 hasNext 和 hasNextLine 的区别
int n = Integer.parseInt(bf.readLine());
int[] chs = Arrays.stream(bf.readLine().split(" ")).mapToInt(
Integer::parseInt).toArray();
Map<Integer,Integer> map=new HashMap<>();
List<int[]> results=new ArrayList<>();
int maxLen=0;
int l=0;
for (int r = 0; r < n; r++) {
//右侧先滑动
map.put(chs[r],map.getOrDefault(chs[r],0)+1);
//右侧元素个数大于1时,左侧收缩
while(map.get(chs[r])>1){
//左侧对应键计数更新
map.put(chs[l],map.get(chs[l])-1);
if(map.get(chs[l])==0){
map.remove(chs[l]);
}
l++;//左侧滑动
}
int cur=r-l+1;
if(cur>maxLen){
maxLen=cur;
results.clear();
results.add(new int[]{l+1,r+1});
}else if(cur==maxLen){
results.add(new int[]{l+1,r+1});
}
}
System.out.println(results.size());
results.forEach(item->System.out.println(item[0]+" "+item[1]));
}
}