代码之家  ›  专栏  ›  技术社区  ›  ryanprayogo

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

  •  1
  • ryanprayogo  · 技术社区  · 14 年前

    考虑整数列表 <1,5,10> (假设按升序排序)。

    给定一个整数,比如, key = 6 ,是否有一个实用方法返回 key (在这种情况下是10)?

    注意:循环遍历列表中的元素并将其与 钥匙 这是一个显而易见的方法,但我想知道是否存在一个实用方法来做同样的事情:)

    2 回复  |  直到 14 年前
        1
  •  3
  •   polygenelubricants    14 年前

    二进制搜索有效,但如果实际上您有一组已排序的值,则不是 List A SortedSet (或者更好的是 NavigableSet )是最自然的数据结构选择。

    下面是一个示例用法:

        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 在某些情况下更有用的对应项。

        2
  •  6
  •   Aryabhatta    14 年前

    你考虑过吗 Binary Search ? Collections 有一个可以使用的BinarySearch方法。

    从Collections BinarySearch文档中:

    返回:

    搜索键的索引,如果 它包含在列表中; 否则,(-(插入点)-1)。 插入点定义为 钥匙的位置 插入到列表中:的索引 第一个元素大于 key或list.size(),如果所有元素 在列表中小于 指定键。注意这个 保证返回值将 如果且仅当键为 找到了。

    我将让您了解如何使用collections.binarysearch的返回值来获得所需的答案。