双指针。
要注意的是18行left = max(left, index + 1);一定不要忘记加max,因为left这次不是一步一步往前走了,是往前跳跃,跳跃的时候有可能直接跳过了未来可能出现的“重复数字”。
class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
int len = arr.size();
int left= 0, right = 0, maxlen = 0;
unordered_map<int, int> map;
while(right < len)
{
if(map.find(arr[right]) != map.end())
{
int index = map.find(arr[right])->second;
// 一定要注意这点用max!
left = max(left, index + 1);
}
map[arr[right]] = right;
if(right - left + 1 > maxlen) maxlen = right - left + 1;
right++;
}
return maxlen;
}
};


京公网安备 11010502036488号