package array;
import java.util.HashSet;
import java.util.Set;
/**
@description: 无重复数字的最长子数组 滑动窗口
@author: zhangxianglong
@date: 2021/6/17
@time: 19:22
Copyright (C) 2018 Meituan
All rights reserved
/
public class UNMaximalSubArray {public static void main(String[] args) {
int[] arr = new int[]{1, 1, 3, 4, 2}; int maxLength = maxLength(arr); System.out.println(maxLength(arr));
}
/* 滑动窗口,用set维护一个不重复的窗口 */
public static int maxLength(int[] arr) {int res = 0; Set<Integer> set = new HashSet<Integer>(); for (int l = 0, r = 0; r < arr.length; r++) { int a = arr[r]; while (set.contains(a)) { set.remove(arr[l++]); } set.add(a); res = Math.max(res, r - l + 1); } return res;
}
/**
通过滑动窗口 这种方式8/10个case能通过
@param nums
@return
/
public static int maxLength2(int[] nums) {int left = 0;
int right = 0;
int max = Integer.MIN_VALUE;while (right < nums.length) {
for (int i = left; i < right; i++) { if (nums[i] == nums[right]) { left++; } } max = Math.max(max, right - left + 1); right++;
}
return max;
}
}