题解 | #最长无重复子数组#
最长无重复子数组
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; }