java - 当列表中不存在 X 时,从列表中查找大于 X 的值

标签 java list binary-search

我正在尝试从列表中查找大于特定值(在我的情况下已知)的值。

示例:

给定

list = [1, 2, 5, 10, 15];  //list is sorted

查找大于 X 的值(在本例中为 =7)。

所需结果 = 返回包含值的列表 = [10, 15]

我尝试使用java二分搜索,例如

int index = Collections.binarySearch(list, X);

我的计划是找到(X)的索引,然后返回索引之后的所有元素。

但是索引返回负值,我理解这是因为 7 不在列表中。

还有别的办法吗?请有人推荐。

最佳答案

如果您的列表排序为 Collection#binarySearch如果搜索关键字包含在列表中,则返回它的索引;否则,(-(插入点) - 1)。您可以计算 insert_point 的开始索引,如下所示:

     index= -(insertion_point) - 1
     -(insertion_point)= index+1
     insertion_point=-(index+1)

获得List的开始索引后,您可以应用subList方法获取大于 X 的结果列表。

    Integer[] values = {1, 2, 5, 10, 15};
    List<Integer> list = new ArrayList<>(Arrays.asList(values));
    int X = 7;
    int index = Collections.binarySearch(list, X);

    int insertion_point = -(index+1); // As calculated above.

    List<Integer> res = list.subList(insertion_point, list.size());
    System.out.println(res);

输出:[10, 15]

关于java - 当列表中不存在 X 时,从列表中查找大于 X 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19579652/

相关文章:

python - 高效地对 pandas 列的多个子集进行回归分析

java - 互联网断开连接时重新连接 OkHttp websocket

Python:输入相同但输出不同

java - 这个 if/else 语句可以减少或改进吗?

R 将 data.frame 转换为按列列出

java - 在 Java 中确定 BigInteger 是否为素数

c++ - 二进制搜索 C++,STATUS_ACCESS_VIOLATION

java - 在排序矩阵中查找元素

java - Android Mvvm,具有多个 Activity 的应用程序

java - 如何避免 Buffer Reader 中的 NullPointErexception?