题解 | #最长无重复子数组#
最长无重复子数组
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
import java.util.*;
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
/**
思路:利用双指针 left = right = 0;
right++直至有window中有重复数组为止。记录当前最大无重复数组 [left,right - 1];
然后left 找到那个重复的元素 的下一位
再次right++直至有window中有重复数组为止。记录当前最大无重复数组 [left,right - 1];
然后再次left 找到那个重复的元素 的下一位
.....
直至right 越界
*/
public int maxLength (int[] arr) {
// write code here
//滑动窗口 分别记录数字和它的下标
HashMap<Integer,Integer> window = new HashMap<>();
//初始化双指针
int left = 0;
int right = 0;
//记录最长子数组start 和 len 来唯一确定
int len = 1;
while(right < arr.length){
if(!window.containsKey(arr[right])){
if(right - left + 1> len){
len = right - left + 1;
}
}else{
//这里要判断当前的这个数的位置是否还在窗口中
//如果在窗口中 才 +1 不在窗口中 left不变 否则left会移到窗口左边 无法再向右滑动
//例:1 2 3 4 3 2
if(window.get(arr[right]) >= left){
left = window.get(arr[right]) + 1;
}
//如果重复的数不在窗口中 那么不会影响 len还是照样变大
if(right - left + 1> len){
len = right - left + 1;
}
}
window.put(arr[right],right);
right++;
}
return len ;
}
}

查看1道真题和解析
叮咚买菜公司氛围 118人发布