题解 | #最长无重复子数组#
最长无重复子数组
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
// write code here
/*
0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 2 9 7
需要考虑没有重复的
*/
int left = 0, right = 0;
int maxi = 0;
int dup = 0; //判断右边是否有重复的,还是走到头了
set<int> st;
if(arr.size()<=1)
return arr.size();
while(left<=right && right<arr.size())
{
while(right<arr.size())
{
if(find(st.begin(),st.end(),arr[right])==st.end())
{
st.insert(arr[right]);
right++;
}
else
{
dup = 1;
if(right-left>maxi)
maxi=right-left;
break;
}
}
if(right-left>maxi)
maxi=right-left;
while(left<=right&&dup==1)//如果是有重复的,要从左边去重
{
if(arr[left]==arr[right])
{
dup = 0;
}
st.erase(arr[left]);
left++;
}
}
return maxi;
}
};