【发布时间】:2014-12-07 17:55:48
【问题描述】:
我想在数组列表中找到第二个最小值。这是我的代码。有更好的方法吗?
int main(){
int a[5]={7,5,45,89,12};
int smallest=a[0];
int index;
for(int i=0;i<5;i++){
if(a[i]<smallest){
smallest=a[i];
index=i;
}
}
smallest=a[0];
for(int i=0;i<5;i++){
cout<<i;
if((a[i]<smallest )&& (i!=index)){
smallest=a[i];
}
}
cout<<"second smallest value is: "<<smallest;
这段代码在 O(n) 时间内运行?第一个循环需要 n 步,而另一个 for 循环也需要 n 步。因此总共需要 O(n) 时间复杂度。
这是对的吗?如果我错了,请有人纠正我
【问题讨论】:
-
是的,它是 O(N),但是常数乘数是 2,你应该能够在 O(N) 中用乘数 1 来做到这一点。也就是说,你不应该需要两个循环;一个就足够了。
标签: c++ arrays time-complexity minimum