[JavaScript]最长无重复子数组

  • 时间:
  • 浏览:
  • 来源:互联网

最长无重复子数组

  • 描述
  • 示例1
  • 示例2
  • 示例3
  • 示例4
  • 示例5
  • 思路
  • 代码

描述

给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组

示例1

输入:
[2,3,4,5]
返回值:
4
说明:
[2,3,4,5]是最长子数组

示例2

输入:
[2,2,3,4,3]
返回值:
3
说明:
[2,3,4]是最长子数组

示例3

输入:
[9]
返回值:
1

示例4

输入:
[1,2,3,1,2,3,2,2]
返回值:
3
说明:
最长子数组为[1,2,3]

示例5

输入:
[2,2,3,4,8,99,3]
返回值:
5
说明:
最长子数组为[2,3,4,8,99]

思路

很容易想到,子数组肯定双指针,无重复肯定map,当然这里可以用set代替,因为只需要存一个数据

代码

/**
 * 
 * @param arr int整型一维数组 the array
 * @return int整型
 */
function maxLength( arr ) {
    // write code here
    var left=0,right=0,max=0
    var set=new Set()
    while(right<arr.length){
        if(set.has(arr[right])){
            set.delete(arr[left++])
        }else{
            set.add(arr[right++])
            max=Math.max(max,set.size)
        }
    }
    return max
}
module.exports = {
    maxLength : maxLength
};

本文链接http://metronic.net.cn/metronic/show-53446.html