题解 | #最长无重复子数组#
最长无重复子数组
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; } };