您的位置:首页 > 科技 > 能源 > 网站策划方案如何做_网站建设合同制_免费写文案神器_企业管理8大系统

网站策划方案如何做_网站建设合同制_免费写文案神器_企业管理8大系统

2024/12/23 10:31:42 来源:https://blog.csdn.net/2301_78353179/article/details/143955439  浏览:    关键词:网站策划方案如何做_网站建设合同制_免费写文案神器_企业管理8大系统
网站策划方案如何做_网站建设合同制_免费写文案神器_企业管理8大系统

问题描述

小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌,播放后将其从歌单中移除。如果歌单中还有歌曲,则会将当前第一首歌移到最后一首。这个过程会一直重复,直到歌单中没有任何歌曲。

例如,给定歌单 [5, 3, 2, 1, 4],真实的播放顺序是 [5, 2, 4, 1, 3]

保证歌曲中的id两两不同。


测试样例

样例1:

输入:n = 5 ,a = [5, 3, 2, 1, 4]
输出:[5, 2, 4, 1, 3]

样例2:

输入:n = 4 ,a = [4, 1, 3, 2]
输出:[4, 3, 1, 2]

样例3:

输入:n = 6 ,a = [1, 2, 3, 4, 5, 6]
输出:[1, 3, 5, 2, 6, 4]

问题理解

题目描述了一个特殊的随机播放规则:

  1. 首先播放歌单中的第一首歌,播放后将其从歌单中移除。
  2. 如果歌单中还有歌曲,则会将当前第一首歌移到最后一首。
  3. 重复上述过程,直到歌单中没有任何歌曲。

数据结构选择

为了实现这个播放规则,我们可以使用一个队列(Queue)来模拟歌单。队列的特点是先进先出(FIFO),非常适合用来处理这种需要按顺序播放和移动歌曲的场景。

算法步骤

  1. 初始化:将所有歌曲放入队列中。
  2. 播放歌曲
    • 从队列中取出第一首歌,并将其加入结果列表。
    • 如果队列中还有歌曲,将当前队列的第一首歌移到队列的末尾。
  3. 重复:重复上述步骤,直到队列为空。

代码实现

#include <iostream>
#include <vector>
#include <queue>  // 引入队列头文件std::vector<int> solution(int n, std::vector<int> a) {std::vector<int> result;  // 用于存储播放顺序std::queue<int> songQueue;  // 用于模拟歌单的队列// 将所有歌曲放入队列中for (int song : a) {songQueue.push(song);}// 模拟播放过程while (!songQueue.empty()) {// 取出队列中的第一首歌,并将其加入结果列表int currentSong = songQueue.front();songQueue.pop();result.push_back(currentSong);// 如果队列中还有歌曲,将当前队列的第一首歌移到队列的末尾if (!songQueue.empty()) {int nextSong = songQueue.front();songQueue.pop();songQueue.push(nextSong);}}return result;  // 返回最终的播放顺序
}int main() {std::vector<int> result1 = {5, 2, 4, 1, 3};std::vector<int> result2 = {4, 3, 1, 2};std::vector<int> result3 = {1, 3, 5, 2, 6, 4};std::cout << (solution(5, {5, 3, 2, 1, 4}) == result1) << std::endl;std::cout << (solution(4, {4, 1, 3, 2}) == result2) << std::endl;std::cout << (solution(6, {1, 2, 3, 4, 5, 6}) == result3) << std::endl;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com