网站建设服务公,沈阳建站经验,做app必须有网站,西安十强网络公司问题描述
小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌#xff0c;播放后将其从歌单中移除。如果歌单中还有歌曲#xff0c;则会将当前第一首歌移到最后一首。这个过程会一直重复#xff0c;直到歌单中没有任何歌曲。
例如#xff0c;给定歌单 [5, 3, 2, 1,…问题描述
小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] 问题理解
题目描述了一个特殊的随机播放规则
首先播放歌单中的第一首歌播放后将其从歌单中移除。如果歌单中还有歌曲则会将当前第一首歌移到最后一首。重复上述过程直到歌单中没有任何歌曲。
数据结构选择
为了实现这个播放规则我们可以使用一个队列Queue来模拟歌单。队列的特点是先进先出FIFO非常适合用来处理这种需要按顺序播放和移动歌曲的场景。
算法步骤
初始化将所有歌曲放入队列中。播放歌曲 从队列中取出第一首歌并将其加入结果列表。如果队列中还有歌曲将当前队列的第一首歌移到队列的末尾。重复重复上述步骤直到队列为空。
代码实现
#include iostream
#include vector
#include queue // 引入队列头文件std::vectorint solution(int n, std::vectorint a) {std::vectorint result; // 用于存储播放顺序std::queueint 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::vectorint result1 {5, 2, 4, 1, 3};std::vectorint result2 {4, 3, 1, 2};std::vectorint 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;
}