我知道,如果不存在任何键并且在最佳情况下复杂度为O(1),则可以线性搜索O(n)时间复杂度的数字。 如果我要查找特定平均情况下的数字,搜索算法将是什么?
答案 0 :(得分:0)
我可以看到您当前的解决方案是一个简单的线性搜索,您正确的是O(n)(不是O(1),因为这只是一个孤立的情况,发生概率为1 / n)。
在我认为是数字排序数组中找到数字的更好解决方案是使用二进制搜索。 (即使未对数组进行排序,如果要执行大量查找,也可能值得用O(n)排序(如基数排序)对数字进行排序,然后继续在您的数组上运行二进制搜索排序数组)
二进制搜索的概念是不断将数组的中间元素与目标值进行比较,然后递归搜索将包含目标元素的电流的一半,并返回是否在任意点找到该值。
通过连续丢弃不能包含目标值的数组的一半,二分查找的时间复杂度为O(log n),明显优于O(n)。
这是一个很好的资源:
https://www.geeksforgeeks.org/binary-search/
祝你好运!