题目:NC41 最长无重复子数组
给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
function maxLength( arr ) {
// write code here
var len = arr.length;
var max = 1;
var map = new Map();
var k = 0;
for(var i=0;i<len;i++){
if(map.has(arr[i])){
//当前值已有,索引指向下一个map.get(arr[i])+1
k = Math.max(k,map.get(arr[i])+1) //k为新的起点,即重复元素的大的索引
}
map.set(arr[i],i); //当前键值存入map中,键是arr[i],value是索引i,重复的元素存最新的键值
//更新最大值,k是起点,i是当前位置,i-k+1是当前位置结尾的不重复字符串的长度
max = Math.max(max,i-k+1) // Math.max(a,b)返回a到b之间较大的数
}
return max;
}
const arr = [1,2,2,1];
console.log(maxLength(arr));