首先:题意;无重复指的是值无重复,连续指的是下标连续。
思路:1.首先是题意需要查重,去重,选用set。
2.定义两个变量,一个变量控制左边界,一个控制右边界,遍历,数组元素在set中没有,就将数组元素加入set,右边界加一,如果set中已经有了这个元素,删除,左边界改变,左边界加一。遍历结束记录返回就可以。
上代码:
class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr)
{
// write code here
set <int> test;//定义set
int res=0;
int L=0,R=0;//定义左右边界
while(L<arr.size()&&R<arr.size())
{
if(test.find(arr[R])==test.end())//如果在set没有这个元素
{
test.insert(arr[R]);
R++;
res=max(res,R-L);//计算最长无重复子数组
}
else//有 删除,左边界加一
{
test.erase(arr[L]);
L++;
}
}
return res;
}
};