799. 最长连续不重复子序列 - AcWing题库
Question
Content
给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
输入格式
第一行包含整数 n 。
第二行包含 n 个整数(均在 0 ∼ 105 范围内),表示整数序列。
输出格式
共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。
数据范围
1 ≤ n ≤ 105
输入样例:
5
1 2 2 3 5
输出样例:
3
Solution
Java
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = IntStream.range(0, n)
.map(e -> scanner.nextInt()).toArray();
int longestSubsequence = findLongestContinuousNonRepeatingSubsequence(arr);
System.out.println(longestSubsequence);
}
private static int findLongestContinuousNonRepeatingSubsequence(int[] arr) {
int longestSubsequence = 0;
Map<Integer, Integer> map = new HashMap<>();
int j = 0;
for (int i = 0; i < arr.length; i++) {
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
while (j < i && map.get(arr[i]) > 1) {
map.put(arr[j], map.getOrDefault(arr[j], 0) - 1);
j++;
}
longestSubsequence = Math.max(longestSubsequence, i - j + 1);
}
return longestSubsequence;
}
}
Summary
Java program finds longest non-repeating subsequence length using sliding window and HashMap.