考虑两个整数向量v1
和v2
,其中v1
已排序,而v2
未排序。使用find()
在这两个向量中搜索元素的时间复杂度是多少?
std::find()
执行线性搜索,即逐元素搜索,直到找到要查找的值。无论集合是否排序,它都是线性的。
如果您有一个排序向量,您可能需要考虑使用std::lower_bound()
执行二进制搜索。这将是矢量大小的对数。
std::find
的时间复杂度将始终是线性O(n(,因为它不知道std::vector
。它必须将向量视为非排序的,并对所有元素执行线性搜索。
然而,实时性可能取决于具体情况。排序可能会有所帮助,因为std::find
可能会更快结束。这取决于你在寻找什么。假设您正在一个未排序的数组(5,1,3,4,2)
中查找2
——您必须比较所有元素。但对于已排序的(1,2,3,4,5)
,只比较两个元素,就可以找到2
。