C++ 查找向量中小于阈值(复杂度)的所有数字

C++ 查找向量中小于阈值(复杂度)的所有数字,c++,sorting,vector,C++,Sorting,Vector,设v为n大小的未排序的向量,我们希望从中找到小于给定阈值增量的所有数字 第一个建议 #include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {5,12,2,3,10,122,45}; int delta = 5; for(size_t i = 0; i < v.size();i++){ if(v[i] &

v
n
大小的
未排序的
向量,我们希望从中找到
小于给定阈值
增量的所有数字


第一个建议

#include <iostream>
#include <vector>
using namespace std;
int main()
{
   vector<int> v = {5,12,2,3,10,122,45};
   int delta = 5;
   for(size_t i = 0; i < v.size();i++){
      if(v[i] < delta){cout << v[i] << endl;}
   }
  return 0;
}
#include <iostream>
#include <vector>
using namespace std;
int main()
{

   vector<int> v = {5,12,2,3,10,122,45};
   //Sort vector v
   std::sort(v.begin(), v.end());
   int delta = 5;
   for(size_t i = 0; i < v.size();i++){
      if(v[i] < delta){cout << v[i] << endl;}
      //I added the break since it's not important anymore to find all the numbers that are greater than `delta`/
      else {break;}
   }
  return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
向量v={5,12,2,3,10122,45};
int delta=5;
对于(size_t i=0;iif(v[i]copy\u if
(或
remove\u if
),它确实是
O(n)
在未排序的向量上

第二种解决方案需要对向量进行排序,这几乎总是会使复杂度变得更糟;典型的排序算法在
O(n logn)
中工作(在最坏的情况下会稍微接近
n^2
),而知道范围的算法在
O(n)
中工作



一个相当简短和直观的解释是,在任何给定的遍历点上,因为你对前面的元素一无所知,所以你不能跳过它们,直到你检查完所有元素为止。

对于未排序的向量,没有比
O(n)
更好的解决方案了。