题解 | #最长无重复子数组#
最长无重复子数组
http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
用set记录元素值;用l、r记录左右下标;
如果arr[r]存在于set;那就饿在set中删除arr[l]到arr[r]
class Solution { public: /** * * @param arr int整型vector the array * @return int整型 */ int maxLength(vector<int>& arr) { if(arr.empty()) return 0; if(arr.size()==1)return 1; //init map<int,int> map; // value-index set<int>st; //set.erase() int left = 0; int right = 0; map[arr[0]] = 0; int maxLength = 0; //记录最大连续不重复子序列长度 while(left<=right && right<arr.size()){ //[left,right] if(st.count(arr[right]))//if(st.find(arr[right]!=st.end)) { //从left删除至与arr[right]等值元素 while(arr[left]!=arr[right]){ st.erase(arr[left]); ++left; } ++left; st.erase(left);//加不加无所谓//为什么呢? } //加入arr[right] st.insert(arr[right]);//已经存在就不会再添加 maxLength = maxLength<st.size()? st.size():maxLength; ++right; } return maxLength; } };