C++ 查找向量中小于阈值(复杂度)的所有数字
设v为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] &
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;i if(v[i]copy\u if
(或remove\u if
),它确实是O(n)
在未排序的向量上
第二种解决方案需要对向量进行排序,这几乎总是会使复杂度变得更糟;典型的排序算法在O(n logn)
中工作(在最坏的情况下会稍微接近n^2
),而知道范围的算法在O(n)
中工作
一个相当简短和直观的解释是,在任何给定的遍历点上,因为你对前面的元素一无所知,所以你不能跳过它们,直到你检查完所有元素为止。对于未排序的向量,没有比O(n)
更好的解决方案了。