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

最长无重复子数组

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;
    }
}
全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务