用一个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;
    }
}