1. 双指针法,map记录的是每个不重复key的索引

      1. class Solution {
      2. public:
      3. int maxLength(vector<int>& arr) {
      4. // write code here
      5. int n = arr.size();
      6. int len =0;
      7. unordered_map<int,int>mp;//用集合实先计数
      8. for(int i =0,j=0;i<n;i++){
      9. if(mp.count(arr[i])){
      10. /// j=mp[arr[i]]+1;
      11. //可能arr[i]重复的不是arr[j],而是map中某一个
      12. //那么j 就会 > mp[arr[i]]
      13. j=max(mp[arr[i]]+1,j);
      14. }
      15. mp[arr[i]]=i;
      16. len=max(len,i-j+1);
      17. }
      18. return len;
      19. }
      20. };
    2. 用Unorder_set记录子数组,其大小就是子数组个数 ```cpp class Solution { public: int maxLength(vector& arr) {

      1. // write code here
      2. int n = arr.size();
      3. int len =0;
      4. unordered_set<int>jihe;
      5. int l=0,r=0;
      6. while(r<n){
      7. if(jihe.find(arr[r]) !=jihe.end()){
      8. jihe.erase(arr[l]);
      9. l++;
      10. }else{
      11. jihe.insert(arr[r]);
      12. r++;
      13. }
      14. len=max(len,(int)jihe.size());
      15. }
      16. return len;

      } };

    ```