杭电oj1004 java
时间: 2023-11-18 07:54:11 浏览: 184
题目描述:给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。
这道题可以使用滑动窗口的思想来解决。具体来说,我们可以维护一个窗口,使得窗口中的元素都是不重复的。我们可以用一个哈希表来维护窗口中的元素,具体来说,哈希表中存储每个元素最后一次出现的位置。每次我们右移右端点,如果右端点对应的元素已经出现在窗口中,那么我们需要将左端点移动到右端点对应的元素上一次出现的位置的下一个位置,这样才能保证窗口中的元素都是不重复的。在这个过程中,我们可以记录窗口的最大长度,即为所求的答案。
下面是Java代码实现:
```
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
int left = 0, right = 0;
int ans = 0;
Map<Integer, Integer> map = new HashMap<>();
while (right < n) {
if (map.containsKey(nums[right])) {
left = Math.max(left, map.get(nums[right]) + 1);
}
map.put(nums[right], right);
ans = Math.max(ans, right - left + 1);
right++;
}
System.out.println(ans);
}
}
}
```
阅读全文