作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个直接缓冲区,其中包含已排序的整数(即 1,1,3,3,3,3,7,7,....)。大多数值会出现多次。我想找到我搜索的值的第一个位置。
如果不是,建议采用哪种搜索算法来实现,前提是:
编辑:感谢所有建议Arrays.binarySearch()
的海报,但据我所知,直接缓冲区通常没有后备数组。这就是为什么我一直在寻找一个直接在缓冲区上工作的实现。
此外,每个值最多可以出现一千次,因此在找到着陆点后进行线性搜索可能效率不高。不过,dasblinkenlight 的比较器建议可能会奏效。
最佳答案
最好的方法是编写您自己的 Binary Search 实现代码对于缓冲区。这种方法小心地避免了与创建 View 、复制大型数组等相关的潜在性能影响,同时保持紧凑。
链接处的代码示例返回最右边的点;您需要在 nums[guess] > check
行上用 >=
替换 >
以获得最左边的点。这可以为您节省潜在的昂贵的反向线性搜索,或使用“反向”Comparator
,这需要将您的 int
包装到 Integer
对象中。
关于java - 如何在 Java 中有效地搜索已排序的、巨大的、直接的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944684/
我是一名优秀的程序员,十分优秀!