原题链接
知识点
哈希,双指针,数组
题解
class Solution {
public:
int maxLength(vector<int>& arr) {
if (arr.size() <= 1) { //如果长度是0的话返回0,长度是1的话返回1,特殊情况处理完毕
return arr.size();
}
vector<int>tmp(100000, -1); //取值范围是100000,初始化为-1
int left = 0, ret = 0;
for (int right = 0; right < arr.size(); right++) { //
if (tmp[arr[right]] != -1) {
left = max(tmp[arr[right]] + 1, left); //当遍历到第right个时前面有一个该值,left就应该是max(tmp[arr[right]] + 1, left),+1是为了让left指向重复的元素的后面
}
tmp[arr[right]] = right;
ret = max(1 + right - left, ret); //取最大值的区间
}
return ret;
}
};
时间复杂度o(n)空间复杂度o(1)
感谢观看!!!!!