题解 | #最长无重复子数组#
最长无重复子数组
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
package com.hhdd.双指针;
import java.util.HashMap;
/**
* @Author huanghedidi
* @Date 2022/8/7 23:23
*/
public class 最长无重复子数组 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,2,5,1};
int re = maxLength(arr);
System.out.println("re = " + re);
}
/**
* 使用滑动窗口解决
*
* @param arr
* @return
*/
public static int maxLength(int[] arr) {
// write code here
if (arr.length == 1) {
return 1;
}
int res = 0;
int left = 0;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
// 如果包含就得刷新left
Integer tmp = map.get(arr[i]);
if (tmp!=null && tmp >= left) {
// 包含了也不一定就得调整left 因为1 2 3 4 2 1 在第二个2 的位置已经把1给调整清理掉了
left = tmp + 1;
} else {
res = Math.max(res, i - left + 1);
}
map.put(arr[i], i);
}
return res;
}
}
莉莉丝游戏公司福利 797人发布