解题思路:

  1. 使用滑动窗口去做
  2. 滑动窗口的右边界是添加元素,左边界是删除元素
  3. 当新的元素来的时候,判断当前窗口内是否有这个元素值。
  4. 如果没有,那么直接从右边界添加此元素,记录当前窗口的大小。
  5. 如果有,那么左边界一直收缩,直到没有为止,期间记录当前窗口的大小。

代码实现:

import java.util.*;


public class Solution {
    /**
     * 
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int maxLength (int[] arr) {
        // write code here
        HashSet<Integer> window = new HashSet<>();
        int max_len = 0;
        int i = 0;
        for(int j=0; j<arr.length; j++){
            while(!window.isEmpty() && window.contains(arr[j])){
                window.remove(arr[i]);
                i++;
            }
            window.add(arr[j]);
            max_len = Math.max(j - i + 1, max_len);
        }
        return max_len;
    }
}