我目前正在参加有关竞争性课程的课程。我遇到了一个函数调用问题,其中一个任务要求我在双端队列中找到一个值。不幸的是,我当前的实现具有时间复杂度O(N)
而且速度太慢。
我的代码是这样的:
deque<int>::iterator find(int ref) {
for (deque<int>::iterator it = d.begin(); it != d.end(); ++it) {
if (*it == ref) return it;
}
return d.begin();
}
在询问之后,我发现我需要对数时间复杂度O(log N)
以避免超出时间限制(TLE)错误。请帮忙,谢谢!
答案 0 :(得分:2)
如果内容已排序,您可以使用二分搜索:http://en.cppreference.com/w/cpp/algorithm/binary_search
在地图上更改双端队列:http://www.cplusplus.com/reference/map/map/find/(对数大小。)