#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
// write code here
unordered_map<int, int> lastSeen; // 记录每个数字最后出现的位置
int maxLen = 0;
int start = 0; // 当前无重复子数组的起始位置
for (int end = 0; end < arr.size(); end++)
{
// 如果当前数字已经出现过,并且上次出现的位置在当前窗口内
if (lastSeen.count(arr[end]) && lastSeen[arr[end]] >= start)
{
// 移动start到重复数字的下一个位置
start = lastSeen[arr[end]] + 1;
}
// 更新当前数字的最后出现位置
lastSeen[arr[end]] = end;
// 计算当前窗口长度并更新最大值
maxLen = max(maxLen, end - start + 1);
}
return maxLen;
}
};