image.png
    image.png
    image.png
    image.png
    image.png

    1. /**
    2. * 小于索引的最大值
    3. *
    4. * @param data
    5. * @param target
    6. * @param <E>
    7. * @return
    8. */
    9. public static <E extends Comparable<E>> int lower(E[] data, E target) {
    10. int l = -1, r = data.length - 1;
    11. while (l < r) {
    12. // mid向上取整 避免相邻情况下的问题
    13. int mid = l + (r - l + 1) / 2;
    14. if (data[mid].compareTo(target) <= 0) {
    15. l = mid;
    16. } else {
    17. r = mid - 1;
    18. }
    19. }
    20. return l;
    21. }