借鉴二分查找法找出制定容器内大于指定数值的元素个数

public static int countsBiger(final Integer[] array, final int i) { 
        final int idx; 
    final int len = array.length; 
    // 先排除首尾的 
    if (array[0] > i) { 
            return len; 
    } 
    if (array[len - 1] <= i) { 
        return 0; 
    } 
    // 如不包含则借鉴二分查找法进行查找 
    int midIdx = 0; 
    int n = 2; 
    int tag; 
    while ((tag = (len / n)) >= 0) { 
        midIdx = array[tag]; 
        if (midIdx > i) { 
            if (tag == 0) { 
                break; 
            } 
            // 如果仍比指定值大则继续切割 
            n *= 2; 
        } else if (midIdx == i) { 
            break; 
        } else { 
            if (array[tag + 1] >= i) { 
            // 如果下个数字就不小于指定数字则结束循环,得出结果为 tag 
                break; 
            } else { 
            // 找出此区间(tag,lastTag)上次切割点)内第一个不小于i的元素 
                int lastTag = len / (n / 2); 
                while (lastTag - tag > 1) { 
                    tag += (lastTag - tag) / 2; 
                    if (array[tag] >= i) { 
                        break; 
                    } 
                } 
                break; 
            } 
        } 
    } 
    return len - 1 - tag; 
}
以为懂了,却发现啥都没懂。一直以为不知道——嘿!却TM明白了!
矛盾幻想虚伪善良懦弱勇敢多彩平淡