[英]max value and min value time complexity O in c++
有谁知道以下两种方法可以找到相同长度向量的最大值和最小值,哪种方法在 C++ 中更快:
1.
std::sort(vector.begin(),vector.end());
vector.erase(std::unique(vector.begin(),vector.end()),vector.end());
min=vector.front();
max=vector.back();
2.
max=*max_element(vector.begin(),vector.end());
min=*min_element(vector.begin(),vector.end());
这个sort()
函数基本上是快速排序、堆排序和插入排序的混合实现。 默认情况下,它使用快速排序,但如果快速排序进行了不公平的分区并且花费了超过(N*log(N))
时间,它会切换到堆排序; 当数组的大小变小时,它切换到插入排序。
首先在第一个示例中,您使用时间复杂度为O(N*log(N))
sort
函数对向量进行sort
,然后您将删除向量中的唯一元素,这将花费更多的时间,然后您在其中找到最大和最小元素一个最终将花费超过O(N*log(N))
时间的向量。
在第二个示例中,您只是使用 *max_element 和 *min_element 查找最大和最小元素,其整体时间复杂度为 O(N) ,这显然优于O(N*log N)
。
或者,您可以简单地运行 for 循环来查找时间复杂度为O(N)
的最大和最小元素。
排序(快速排序)的平均复杂度为O(n*log2(n))
。
查找数组的最小值或最大值的复杂度仅为O(n)
。
因此,第二个要快得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.