如何解决Testdome练习有关重复播放列表的最快解决方案
我尝试在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个。我没有通过的测试用例是关于性能的。你能帮我改善吗?
解决方法
第四项测试是“大型播放列表的性能测试” 当谈到效率并且您不需要有序数据时,您应该使用 unordered_set 或 unordered_map。
map 搜索复杂度为 O(log n),但在 unordered_set 或 unordered_map 的最坏情况下平均为 O(1) 到 O(n)。
下面的代码通过了 TestDome C++ Playlist 的所有 4 个测试
bool isRepeatingPlaylist()
{
std::unordered_set<std::string> playedSongs;
Song *pSong = this;
while (pSong != nullptr)
{
if (playedSongs.find(pSong->name) == playedSongs.end())
playedSongs.insert(pSong->name);
else
return true;
pSong = pSong->nextSong;
}
return false;
}
要使用它只需添加 #include
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。