微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Testdome练习有关重复播放列表的最快解决方案

如何解决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 举报,一经查实,本站将立刻删除。