题解 | C++版本#最长无重复子数组#

最长无重复子数组

http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4

动态规划。从左到右遍历整个数组 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;
    }
全部评论

相关推荐

Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务