小R的随机播放顺序

问题描述

小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. 重复:重复上述步骤,直到队列为空。

代码实现

cpp 复制代码
#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;
}
相关推荐
buhuizhiyuci4 小时前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
小雪崩5 小时前
嵌入式学习 day25:哈希表及排序与查找
linux·c语言·数据结构·学习·排序算法
白露与泡影5 小时前
解密 Pi 的 Harness 工程:Agent 会话如何实现持久化与恢复
java·人工智能·算法
happyprince7 小时前
01-整体观-Codex全貌解读(源码)
算法·ai编程
俊基科技7 小时前
别自己写算法了,让这颗37.5毫米的模组替你“闭嘴干活”
神经网络·算法·硬件开发·ai降噪·语音模块·回音消除
_Narcissus_7 小时前
动态规划初探(含完整代码实现)
c语言·数据结构·c++·算法·动态规划·背包问题·最短路径
世人万千丶8 小时前
鸿蒙项目实战 - 社区活动编排板:标签云布局算法与自动换行
学习·算法·华为·harmonyos·鸿蒙
zander2588 小时前
LeetCode 279. 完全平方数
算法·深度优先
法哥20129 小时前
用 C++ 控制 CMW100,到底在干什么?
开发语言·c++