第一行输入一个整数
代表数组中的元素数量。
第二行输入
个整数
代表初始数组。
第一行输出一个整数
代表满足条件的区间数量。
此后
行,每行输出两个整数
代表满足条件的区间。本题没有
,请按照
递增的顺序输出。
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])); } }