/*
每次都在寻找当前i之前的最长数组

if(出现过) {
    找到这个数字第一次出现的位置mp[arr[i]]
    指针的位置至少要从mp[arr[i]]后面开始
}
    更新ans
    更改map表对应的值

*/

class Solution {
public:
    int maxLength(vector<int>& arr) {
        map<int,int> last;
        int ans = 0, now = 0;
        for (int i = 0; i < (int)arr.size(); ++i) {
            last[arr[i]] = -1; // init
        }
        for (int i = 0; i < (int)arr.size(); ++i) {
            if (last[arr[i]] != -1) {
                now = max(now, last[arr[i]] + 1);
            }
            ans = max(ans, i - now + 1);
            last[arr[i]] = i;
        }
        return ans;
    }
};