【发布时间】:2014-08-06 18:50:03
【问题描述】:
我必须在数组中找到某个最高值(例如第五个最高值)。
我写了一个算法,但是时间太长了。任何想法如何使它更快?
int tab[100];
// cin tab;
int position;
cin>>position;
// for example i need to find fifth highest
// value in an array.
int temp=0;
sort( tab, tab + 100, greater <int>() );
for(int y=0; y<100; ++y)
{
if (tab[y]==tab[y+1])
continue;
else
{
temp++;
if(temp==position)
cout<<tab[y];
}
}
【问题讨论】:
-
std::nth_element可能会大大加快速度。 -
因为你在输入之后调用了排序,所以你是时间排序+你的算法。
-
当所有元素都相同时,您拥有 UB(
y+1超出范围)。 -
找到价值后,您可以
break。