给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。
输入格式
第一行包含整数n。
第二行包含n个整数(均在0~100000范围内),表示整数序列。
输出格式
共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。
数据范围
1≤n≤1000001≤n≤100000
输入样例:
5
1 2 2 3 5
输出样例:
3
import java.io.*;
import java.lang.*;
import java.util.*;
class Main{
public static void main(String[] args)throws Exception{
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.valueOf(buf.readLine());
String[] strNums = buf.readLine().split(" ");
int[] nums = new int[n];
for(int i = 0; i < n; ++i){
nums[i] = Integer.valueOf(strNums[i]);
}
HashMap<Integer, Integer>map = new HashMap<>();
int max = 0;
for(int i = 0, j = 0; i < n; ++i){
map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
while (j < i && map.get(nums[i]) > 1){
map.put(nums[j], map.get(nums[j]) - 1);
j++;
}
max = Math.max(max, i - j + 1);
}
System.out.print(max);
}
}
本文介绍了一种解决最长无重复数字连续子序列问题的高效算法。通过使用哈希映射,该算法能在O(n)时间内找到给定整数序列中最长的不包含重复数字的连续子序列,并输出其长度。
408

被折叠的 条评论
为什么被折叠?



