class Solution {
public:
int maxLength(vector<int>& arr) {
if (arr.empty()) return 0;
unordered_map<int, int> lastPos; // 记录每个数字最近出现的位置
int left = 0, maxLen = 0;
for (int right = 0; right < arr.size(); right++) {
// 如果当前数字(键)已经在窗口中存在,并且出现位置在left右侧
if (lastPos.find(arr[right]) != lastPos.end() && lastPos[arr[right]] >= left) {
left = lastPos[arr[right]] + 1; // 移动左指针
}
// 更新当前数字的位置,字典中的键是唯一的,出现重复数字时,需更新该键
lastPos[arr[right]] = right;
// 更新最大长度
maxLen = max(maxLen, right - left + 1);
}
return maxLen;
}
};