繁体   English   中英

在某个值之后搜索列表中的最小元素

[英]Search for the smallest element in a list after some value

考虑整数<1,5,10>的列表(假定以升序排序)。

给定一个整数,例如key = 6 ,是否有一种实用程序方法返回key之后的最小元素(在这种情况下为10)?

注意:遍历列表中的元素并将其与key进行比较是一种显而易见的方法,但是我只是想知道是否存在实用工具来执行相同的操作:)

您是否考虑过二进制搜索 集合具有您可以使用的binarySearch方法。

从Collections binarySearch文档中:

返回值:

搜索关键字的索引(如果包含在列表中); 否则为(-(插入点)-1)。 插入点定义为将关键字插入列表的点:如果列表中的所有元素均小于指定的关键字,则第一个元素的索引大于关键字,或者为list.size()。 请注意,这保证了当且仅当找到键时,返回值才> = 0。

我将让您弄清楚如何使用Collections.binarySearch的返回值来获取所需的答案。

二进制搜索有效,但是如果实际上您拥有一组排序的值,那么最自然的选择是使用SortedSet (甚至更好的NavigableSet )代替List ,而不是List

这是一个示例用法:

    NavigableSet<Integer> nums = new TreeSet<Integer>(
        Arrays.asList(9,1,5,7,3)
    );

    System.out.println(nums); // "[1, 3, 5, 7, 9]"

    System.out.println(nums.first()); // "1"
    System.out.println(nums.last());  // "9"

    System.out.println(nums.higher(3)); // "5"
    System.out.println(nums.lower(8));  // "7"

    System.out.println(nums.subSet(2,8)); // "[3, 5, 7]"
    System.out.println(nums.subSet(1, true, 5, true));  // "[1, 3, 5]"

还有NavigableMap对应项,在某些情况下可能会更加有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM