799. 最长连续不重复子序列

90 阅读1分钟

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.