我正在尝试从列表中查找大于特定值(在我的情况下已知)的值。
示例:
给定
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/