Java 求最大值并进行运算

Java 求最大值并进行运算,java,arrays,algorithm,Java,Arrays,Algorithm,我正在处理一个黑客银行问题,该问题说明: 问题是在数组中找到一个包含范围[L,R],这样当该范围按降序排序时,对排序范围中的前2个元素执行AND运算将产生最大可能的结果。然后,该函数必须返回一个包含2个整数的数组,其中索引0包含与数组中L的索引相对应的整数,索引1包含与数组中R的索引相对应的整数 如果有效答案超过1个,则选择L值最低的答案;如果两个或多个有效答案具有相同的L值,请选择跨越最短范围的答案 示例数组={6,3,6} 输出应为0,2 说明:范围[0,2]在排序为{6,6,3}时变为{6

我正在处理一个黑客银行问题,该问题说明:

问题是在数组中找到一个包含范围[L,R],这样当该范围按降序排序时,对排序范围中的前2个元素执行AND运算将产生最大可能的结果。然后,该函数必须返回一个包含2个整数的数组,其中索引0包含与数组中L的索引相对应的整数,索引1包含与数组中R的索引相对应的整数

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

示例数组={6,3,6}

输出应为0,2

说明:范围[0,2]在排序为{6,6,3}时变为{6,6,3}。然后,操作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;
}
静态int[]进程(int[]数组){
int max=0;
列表=新的ArrayList();
整数[]索引=新整数[2];
for(int i=0;i

这个程序只通过了一些测试用例。我无法找出这个程序中的问题所在,请您帮助我。

您的代码和两个值的所有组合,以找到最大值,并错误地得出这样的结论,即当您必须选择它们之间的两个最大值时,最大值组合将保持不变

例如,对于输入
6,2,8,6
,您得出结论,因为
6和6
=
6
是最大值,所以答案是
[0,3]
=>
8,6,6,2
8和6
0
(哎呀!),而
[0,1]
6,2


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

哪些测试失败?你从调试中得出了什么结论?hackerrank的想法是让你自己去弄清楚的。如果我们想弄明白,我们可以自己玩黑客游戏。