Algorithms icon indicating copy to clipboard operation
Algorithms copied to clipboard

Ex29.java 压根就不需要跑就知道有问题,问题都没搞清楚

Open RealZark opened this issue 4 years ago • 3 comments

RealZark avatar May 17 '20 08:05 RealZark

是 1.1.29 吗?请问具体问题是什么呢?@RealZark

jimmysuncpt avatar Jun 28 '20 02:06 jimmysuncpt

是 1.1.29 吗?请问具体问题是什么呢?@RealZark

1.1.29 rank是有问题的,比如你测试key为14,你返回的pos是-1,其实应该是 hi + 1; 另外1.1.29还可以优化,用while去逐个确认是否相等,效率比较低,可以继续用二分查找的思路去查相等的值。

imyuewu avatar Jul 23 '20 12:07 imyuewu

这个应该是一个正确的解,但是不是最优解

public static int rank(int[] a, int key) {
    int lo = 0;
    int hi = a.length - 1;
    
    while (lo <= hi) {
        int mid = lo + (hi - lo) / 2;
        if (a[mid] > key) {
            hi = mid - 1;
        } else if (a[mid] < key) {
            lo = mid + 1;
        } else {
            // find, look backward
            --mid;
            while (mid >= lo && a[mid] == key) {
                --mid;
            }
            return mid + 1;
        }
    }
    // not found
    return hi + 1;
}

imyuewu avatar Jul 23 '20 13:07 imyuewu