我试着在TestDome上做了一个关于发现播放列表是否有重复的练习(TestDome C++ Playlist)
我试着用这种方式解决:
bool isRepeatingPlaylist()
{
std::map<std::string, int> songs;
Song* pSong = this;
while (pSong != nullptr) {
if (songs[pSong->name] > 0)
return true;
songs[pSong->name]++;
pSong = pSong->nextSong;
}
return false;
}
反馈是我通过了4个测试用例中的3个。我没有通过的测试用例是关于性能的。你能帮助我改进吗?
2条答案
按热度按时间gr8qqesn1#
第四个测试是“在大型播放列表上的性能测试”,当涉及到效率时,你不需要有序数据,你应该使用unordered_set〈〉或unordered_map〈〉。
map〈〉的搜索复杂度是O(log n),但在最坏的情况下,unordered_set〈〉或unordered_map〈〉的平均复杂度是O(1)到O(n)。
下面的代码通过了TestDome C++ Playlist的所有4个测试
要使用它,只需添加#include<unordered_set>
ojsjcaue2#
该解决方案使用标准环路检测算法,并且还通过了所有测试: