在最短时间内访问所有地方-JAVA

您想在国外度过下一个假期。夏季,您可以连续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]的结果是错误的;