题解 | #最长无重复子数组#
最长无重复子数组
http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
双指针+模拟
思路:开一个数组,记录每个值出现的次数,然后进行双指针,当下标i++的时候,只有st[arr[i]]的个数会发生改变,所以用另一个下标j进行去除即可。
import java.util.*;
public class Solution {
int st[] = new int[100010];
public int maxLength (int[] arr) {
int res = 0;
int n = arr.length;
for(int i = 0,j = 0;i < n;i++){
st[arr[i]]++;
while(j <= i && st[arr[i]] > 1){
st[arr[j++]]--;
}
res = Math.max(res,i - j + 1);
}
return res;
}
}