Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-搜索数组中最后一个元素的最佳方法是什么?_Java_Arrays_Big O_Binary Search - Fatal编程技术网

Java-搜索数组中最后一个元素的最佳方法是什么?

Java-搜索数组中最后一个元素的最佳方法是什么?,java,arrays,big-o,binary-search,Java,Arrays,Big O,Binary Search,我是这样写的: FindLastRecurrence(对象项){} 在已排序的对象数组中最后一次出现项之后查找索引。这个方法是一个更大的数据结构的一部分,它通过一个比较器输入一个参数,因此对象总是可比较的。我想以最有效的方式来实现这一点,但我不确定线性方法或使用二进制搜索的方法是否会更快。如果有人能向我展示他们推荐的这种方法的实现,我将不胜感激。这取决于数组中的数据类型。如果项目经常重复,并且最后一次出现在(array.length-log_2(array.length))位置或更靠近结束位置,

我是这样写的: FindLastRecurrence(对象项){}


在已排序的对象数组中最后一次出现项之后查找索引。这个方法是一个更大的数据结构的一部分,它通过一个比较器输入一个参数,因此对象总是可比较的。我想以最有效的方式来实现这一点,但我不确定线性方法或使用二进制搜索的方法是否会更快。如果有人能向我展示他们推荐的这种方法的实现,我将不胜感激。

这取决于数组中的数据类型。如果项目经常重复,并且最后一次出现在(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循环,并向数组开头循环。
但我不确定线性方法或使用二进制搜索的方法是否更快
为什么不?你明白二进制搜索的作用吗?