我正在努力解决问题SPOJ上的竞争对手的日子。我尝试了以下方法:
我正在寻找最好的初始球员,所以最初排名第一的球员是最好的球员。在此之后,我遍历所有玩家,并为他们每个人尝试查看是否有任何当前最好的玩家比这更好,如果是,那么这不是很好的丢弃它(因为存在比这更好的玩家),否则我将其添加到最佳播放器列表中。最后我会输出最佳玩家的数量。
for(i=0; i<num; i++)
{
for(j=0; j<ctr; j++)
{
// i is already in best
if(i == best_n[j])
break;
if((elmts[i].a < elmts[best_n[j]].a) ||
(elmts[i].b < elmts[best_n[j]].b) ||
(elmts[i].c < elmts[best_n[j]].c))
{
continue;
}
else
{
break;
}
}
if(j>=ctr)
{
best_n[ctr] = i;
ctr ++;
}
}
num 是玩家人数,而 ctr 是迄今为止最好的玩家人数。但我得到一个错误的答案。我尝试再次运行一个循环,以验证是否有任何玩家比其他玩家更差,但这也会导致错误的答案。另外我认为我的方法效率不高,在最坏的情况下会是 n^2。你能帮我弄清楚我的错误吗,我该如何改进它以提高效率。