找到最大AND操作

时间:2018-02-01 17:16:47

标签: java arrays algorithm

我正在研究一个黑客问题:

问题是在数组中找到包含范围[L,R],使得当范围按降序排序时,对排序范围中的前2个元素执行AND运算会导致所有这些可能的最大值结果。该函数必须返回一个2个整数的数组,其中索引0包含一个对应于数组中L'索引的整数,索引1包含一个对应于数组中R的索引的整数。

如果有超过1个有效答案,请选择L值最低的答案;如果2个或更多有效答案具有相同的L值,请选择跨越最短范围的答案。

示例array = {6,3,6}

输出应为0.2

说明:对于范围[0,2],当排序变为{6,6,3}时变为{6,6,3}。然后AND操作6和6将产生最大可能的答案。因此结果应为[0,2]。

我已经尝试过这个问题并附上以下答案:

static int[] process(int[] array) {
    int max=0;
    List<Integer[]> list = new ArrayList<>();
    Integer[] index = new Integer[2];
    for (int i = 0; i < array.length; i++) {
        for(int j =i+1 ; j <= array.length -1 ; j++){
            int z = array[i] & array[j];
            if(z > max){
                max=z;
                index[0] = i;
                index[1] = j;
                list.add(index);
            }
        }
    }
    int[] result = new int[2];
    result[0] = index[0];
    result[1] = index[1];
    int least = result[0] - result[1];
    for(int i=1; i< list.size(); i++) {
        Integer[] data = list.get(i);
        int temp = index[0] - index[1];
        if(temp < least) {
            least = temp;
            result[0] = index[0];
            result[1] = index[1];
        }
    }

    return result;
}

该程序仅通过了一些测试用例。我无法弄清楚这个程序中的问题,请你帮帮我。

1 个答案:

答案 0 :(得分:1)

您的代码对两个值的所有组合进行AND,以找到最大值,错误得出结论,当您必须选择它们之间范围内的两个最大值时,此类组合的最大值将保持不变

E.g。对于输入6,2,8,6,您得出结论,因为6&6 = 6是最大值,答案是[0,3] =&gt; 8,6,6,2 =&gt; 8&6 = 0 (糟糕!),而[0,1] =&gt; 6,2 =&gt; 6&2 = 2是正确答案。

你的逻辑的前提是有缺陷的。重新思考并重试。