
首先:题意;无重复指的是值无重复,连续指的是下标连续。
思路: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;
}
};
博客探讨了如何解决找到一个数组中最长的无重复元素子数组的问题。采用双指针和集合(set)数据结构,通过遍历数组并检查元素是否在集合中来实现。当遇到重复元素时,删除集合中的旧元素并移动左边界,否则增加右边界并更新最长子数组长度。这种方法有效地解决了连续无重复子数组的查找问题。
683

被折叠的 条评论
为什么被折叠?



