题解 | #最长无重复子数组#
最长无重复子数组
http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
用滑动窗口
- 都初始化为-1
- 如果了,证明有重复的数字出现了,那么更新不重复区间的左边界值
- 每次存的是当前数字的下标
- 注意长度是右边界 - 左边界 ,比如有两个数字,那么长度是数字的下标减去数字的下标还要加,也就是. 及
import java.util.*;
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
// write code here
int n = (int) (1e6 + 7);
int[] num = new int[n];
for (int i = 0; i < arr.length; i++) {
num[arr[i]] = -1;
}
int l = 0;
int res = 0;
for (int i = 0; i < arr.length; i++) {
if (num[arr[i]] != -1) {
l = Math.max(l,num[arr[i]] + 1);
}
num[arr[i]] = i;
res = Math.max(res, i - l + 1);
}
return res;
}
}