您想在国外度过下一个假期。夏季,您可以连续N天自由活动。您已经咨询了旅行社,并了解到他们每天都在提供前往该国一些有趣地点的旅行。为简单起见,每个位置均由0到N-1的数字标识。 行程以非空的零索引数组A描述:对于每个K(0 K
A[0] = 7
A[1] = 3
A[2] = 7
A[3] = 3
A[4] = 1
A[5] = 3
A[6] = 4
A[7] = 1
旅行社提供前往四个不同地点的旅行(分别由数字1、3、4和7标识)。从0天开始的最短假期允许您访问所有这些地点,并在6天结束(因此为期7天)。但是,较短的五天假期(从第二天开始到第六天结束)也使您可以访问所有地点。在每个少于五天的假期中,您将不得不错过至少一个地点。 编写一个函数:类Solution {public int solution(int [] A); } 给定一个由N个整数组成的非空零索引数组A,它返回允许您访问所有提供的位置的最短假期的长度。 例如,给定上面显示的数组A,该函数应返回5,如上所述。给定A = [2,1,1,3,2,1,1,3],该函数应返回3。访问所有地方的最短假期之一从第3天开始(从0开始计数),持续3天天。给定A = [7、5、2、7、2、7、4、7],该函数应返回6。
public class Solution5 {
public static void main(String [] args){
Solution5 sol = new Solution5();
//case 1
int [] c1 = {7, 3, 7, 3, 1, 3, 4, 1};
System.out.println(sol.solution(c1));
//case 2
int [] c2 = {2, 1, 1, 3, 2, 1, 1, 3};
System.out.println(sol.solution(c2));
//case 2
int [] c3 = {7, 5, 2, 7, 2, 7, 4, 7};
System.out.println(sol.solution(c3));
}
public int solution(int a[]) {
int start = 0, end = start + 1;
Set<Integer> dest = new HashSet<Integer>();
for (int i = 0; i < a.length; i++) {
if (a[start] == a[i] && i != 0) {
start++;
end = start + 1;
} else {
if (!dest.contains(a[i])) {
end = i;
}
}
dest.add(a[i]);
}
return end - start + 1;
}
}
[2,1,1,3,2,1,1,3]的结果是错误的;