题解 | #最长无重复子数组#

最长无重复子数组

http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4

用滑动窗口

  1. num[arr[i]]num[arr[i]]都初始化为-1
  2. 如果num[arr[i]]!=1num[arr[i]] != -1了,证明有重复的数字出现了,那么更新不重复区间的左边界值
  3. num[arr[i]]num[arr[i]]每次存的是当前数字的下标
  4. 注意长度是右边界 - 左边界 +1+ 1,比如有两个数字[0,1][0,1],那么长度是数字11的下标11减去数字00的下标00还要加11,也就是22. 及 il+1i - l + 1
import java.util.*;


public class Solution {
    /**
     * 
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int maxLength (int[] arr) {
        // write code here
        int n = (int) (1e6 + 7);
        int[] num = new int[n];
        for (int i = 0; i < arr.length; i++) {
            num[arr[i]] = -1;
        }
        int l = 0;
        int res = 0;
        for (int i = 0; i < arr.length; i++) {
            if (num[arr[i]] != -1) {
               l = Math.max(l,num[arr[i]] + 1); 
            }
            num[arr[i]] = i;
            res = Math.max(res, i - l + 1);
        }
        return res;
    }
}
全部评论

相关推荐

牛客793241816号:三页纸的简历是不是长了点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务