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