用一个Set判重,如果不重复则加入到set中,如果出现重复,则将前面重复元素之前的元素剔除,然后从前面的重复元素之后重新取子数组。
当出现重复时,当前set中的元素就是子数组的长度。如果一直到最后都没有出现重复元素,则set中的元素数量就是最长子数组。
import java.util.*;
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
// write code here
Set<Integer> set = new HashSet();
int start = 0, maxLength = 0;
for(int i = 0; i < arr.length; i++) {
if (set.contains(arr[i])) {
if (maxLength < set.size())
maxLength = set.size();
for (; start < i; start++) {
set.remove(arr[start]);
if(arr[i] == arr[start]) {
break;
}
}
start = start + 1;
}
set.add(arr[i]);
}
if (maxLength < set.size())
maxLength = set.size();
return maxLength;
}
}