动态规划。从左到右遍历整个数组 arr,计算以每个元素为右端的最长子数组存入 dp,其中最大的即为解。

    int maxLength(vector<int>& arr) {
        // write code here
        if(arr.size() == 0) return 0;
        vector<int> dp(arr.size(), 0);
        int max = 1;
        for(int i=1; i<dp.size(); ++i){
            int j = i-1;
            while (j >= dp[i-1]){
                if(arr[j] == arr[i])
                    break;
                --j;
            }
            dp[i] = j+1;
            int len = i - dp[i] + 1;
            if(len > max) max = len;
        }
        return max;
    }