题解 | #最长无重复子数组#

最长无重复子数组

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

动态规划
dp[i] 表示 第i个结尾的最长无重复子数组的长度,dp[0]=1
因此针对dp[i+1],我们最多只要往前遍历 dp[i]个元素,dp[i+1]的长度len=1
往前遍历dp[i]个元素,如果不相等,则 len++,如果碰到相等则跳出循环
此时 dp[i+1] = len

dp[i+1] = 往前遍历dp[i]个元素时不相等的元素个数+1

public int maxLength (int[] arr) {
        // write code here
        //dp[i] 表示 第i个结尾的最长无重复
        int[] dp = new int[arr.length];
        dp[0] = 1;
        int max = 1;

        for(int i=1;i<arr.length;i++){
            int len = 1;
            for(int j=i-1,k=dp[i-1];k>0;k--){
                if(arr[i]!= arr[j--]){
                    len++;
                    continue;
                }
                break;
            }
            dp[i] = len;
            max = Math.max(max,dp[i]);
        }
        return max;
    }
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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