Leeeeyo_ 2014-09-05 22:53 采纳率: 0%
浏览 647

请大神帮我纠错!Java数组的问题

给一个int 数组A[],和一个X,已知A中各元素是升序排列,要求返回X在A中的位置。A可能狂大,注意性能。
class Solution {

int solution(int[] A, int X) {if (A == null) return -1;

    int N = A.length;

    if (N == 0) {

        return -1;

    }

    int l = 0;

    int r = N - 1;

    while (l < r) {

        int m = (l + r) / 2;

        if (A[m] > X) {

            r = m - 1;

        } else if(l < m){

            l = m;

        } else break;

    }

    if (A[l] == X) {

        return l;

    }

    return -1;

}

}

这是我的代码,能帮我看看哪里出错了么?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 14:02
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你的代码有一些小问题:

    1. solution 方法的实现中,你没有处理 N == 0 的情况。这会导致程序崩溃。
    2. 你需要使用 Math.abs() 函数来确保 XA[i] 都是整数类型。
    3. 在比较时,你应该将 A[l]X 转换为 Integer.valueOf(A[l])Integer.valueOf(X),以便正确地进行比较。
    4. 在循环条件中,你可以直接用 if (A[l] >= X) 替换掉 if (A[m] == X),这样可以避免不必要的比较。

    下面是修改后的代码:

    import java.lang.Math;
    import java.util.Arrays;
    
    class Solution {
        public static void main(String[] args) {
            int[] A = {1, 2, 3, 4, 5};
            int X = 3;
            System.out.println(solution(A, X)); // 输出:2
        }
    
        public static int solution(int[] A, int X) {
            if (A == null || A.length == 0) {
                return -1;
            }
            
            int N = A.length;
            int l = 0;
            int r = N - 1;
    
            while (l <= r) {
                int m = (l + r) / 2;
                if (A[m] == X) {
                    return m;
                }
                if (A[m] > X) {
                    r = m - 1;
                } else {
                    l = m + 1;
                }
            }
    
            return -1;
        }
    }
    

    这段代码应该能够解决你的问题,并且具有良好的性能。

    评论

报告相同问题?