Java-搜索数组中最后一个元素的最佳方法是什么?
我是这样写的: FindLastRecurrence(对象项){}Java-搜索数组中最后一个元素的最佳方法是什么?,java,arrays,big-o,binary-search,Java,Arrays,Big O,Binary Search,我是这样写的: FindLastRecurrence(对象项){} 在已排序的对象数组中最后一次出现项之后查找索引。这个方法是一个更大的数据结构的一部分,它通过一个比较器输入一个参数,因此对象总是可比较的。我想以最有效的方式来实现这一点,但我不确定线性方法或使用二进制搜索的方法是否会更快。如果有人能向我展示他们推荐的这种方法的实现,我将不胜感激。这取决于数组中的数据类型。如果项目经常重复,并且最后一次出现在(array.length-log_2(array.length))位置或更靠近结束位置,
在已排序的对象数组中最后一次出现项之后查找索引。这个方法是一个更大的数据结构的一部分,它通过一个比较器输入一个参数,因此对象总是可比较的。我想以最有效的方式来实现这一点,但我不确定线性方法或使用二进制搜索的方法是否会更快。如果有人能向我展示他们推荐的这种方法的实现,我将不胜感激。这取决于数组中的数据类型。如果项目经常重复,并且最后一次出现在(array.length-log_2(array.length))位置或更靠近结束位置,则线性搜索会更好。否则-使用二进制搜索
另外,您可以考虑数据局部性——二进制搜索需要访问数组中的随机元素,并且可以访问比线性搜索更多的缓存行——但这也取决于您想在其中存储的数据类型。 如果您不确定-使用二进制搜索
编辑:实际上,在仔细考虑这个问题之后,线性搜索(步长=1)会比每次迭代后步长增加的搜索更糟糕-就像二进制搜索一样向后运行-检查元素:(n-1)-1,(n-1)-(1+2),(n-1)-(1+2+4)。。。(n-1)-(2^k)如果发现较小的值,则在(n-1)-(2^k)和(n-1)-(2^(k-1))之间进行二进制搜索。最好的方法是先编写代码尝试解决此问题,然后再进行stackoverflow,如果不起作用,则将您对stackoverflow的尝试与您的问题一起发布。提示,使用从数组末尾开始的for循环,并向数组开头循环。
但我不确定线性方法或使用二进制搜索的方法是否更快
为什么不?你明白二进制搜索的作用吗?