题解 | #最长无重复子数组#
最长无重复子数组
http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
这道题主要因为是找最长无重复子数组,只需要从前往后遍历数组就可以,难点是回溯到发生冲突的位置,将其及其之前的元素都从hash表里面去除,可以用双指针来记录这次无冲突重复数组的起始位置和冲突位置,也可以用一个数来记录这次无冲突数组长度,冲突位置减去长度就是起始位置
#include <map> class Solution { public: /** * * @param arr int整型vector the array * @return int整型 */ int maxLength(vector<int>& arr) { // write code here map<int,int> hash_map; int num=0,max=0; for(int i=0;i<arr.size();i++){ if(!hash_map[arr[i]]){ num++; hash_map[arr[i]]++; } else { while(arr[i-num]!=arr[i]){ hash_map.erase(arr[i-num]); num--; } } if(max<num) max=num; } return max; } };