牛客高频题--最长无重复子数组

NC41 最长无重复子数组

 1 class Solution {
 2 public:
 3     /**
 4      * 
 5      * @param arr int整型vector the array
 6      * @return int整型
 7      */
 8     int maxLength(vector<int>& arr) {
 9         // write code here
10         // 从前到后遍历,双指针front,idx指向无重复数组的前后端;
11         // 用一个变量记录当前的最大数组长度,如果后续出现重复值,就从重复处cidx截断,继续向后遍历。
12         if(arr.empty()){return 0;}
13         int front=0,idx=1;
14         map<int,int> cs;cs.insert(make_pair(arr[0], 0));
15         int maxlen=1;
16         int curlen=1;;
17         while(idx<arr.size()){
18             int cidx;
19             if(cs.count(arr[idx])>0){
20                 cidx=cs[arr[idx]];
21                 maxlen=maxlen>curlen?maxlen:curlen;  // 先保留最大值
22                 // 将重复元素前的清空
23                 for(int i=front;i<=cidx;i++){
24                     cs.erase(arr[i]);
25                     curlen-=1;
26                 }
27                 front=cidx+1;
28             }
29             cs.insert(make_pair(arr[idx],idx));
30             curlen++;
31             ++idx;
32         }
33         return max(curlen,maxlen);
34     }
35 };
心之所愿,永不相忘
原文地址:https://www.cnblogs.com/zgll/p/15238490.html