24.小R的随机播放顺序<字节青训营-中等题>

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]

2.思路

用队列存放原始歌单,模拟题目中的播放规则

3.代码

复制代码
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

std::vector<int> solution(int n, std::vector<int> a) {
    // PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE
    // write code here
    queue<int> original_playlist; // 原始歌单
    vector<int> final_playlist; // 最终播放顺序
    // 将原始歌单放入队列中
    for (int i = 0; i < a.size(); i++) {
        original_playlist.push(a[i]);

    }
    while (original_playlist.size() != 0) {
        // 播放歌单中的第一首歌
        int cur = original_playlist.front();
        final_playlist.push_back(cur); 
        // 播放后将其从歌单中移除
        original_playlist.pop();
        // 当前第一首歌移到最后一首
        cur = original_playlist.front();
        original_playlist.pop();
        original_playlist.push(cur);
    }
    return final_playlist;
}

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;
}
相关推荐
小李子呢021117 小时前
前端八股6---v-model双向绑定
前端·javascript·算法
2301_8227032018 小时前
Flutter 框架跨平台鸿蒙开发 - 创意声音合成器应用
算法·flutter·华为·harmonyos·鸿蒙
cmpxr_18 小时前
【C】数组名、函数名的特殊
c语言·算法
KAU的云实验台18 小时前
【算法精解】AIR期刊算法IAGWO:引入速度概念与逆多元二次权重,可应对高维/工程问题(附Matlab源码)
开发语言·算法·matlab
会编程的土豆19 小时前
【数据结构与算法】再次全面了解LCS底层
开发语言·数据结构·c++·算法
大熊背19 小时前
如何利用Lv值实现三级降帧
算法·自动曝光·lv·isppipeline
大尚来也20 小时前
驾驭并发:.NET多线程编程的挑战与破局之道
java·前端·算法
向阳而生,一路生花20 小时前
深入浅出 JDK7 HashMap 源码分析
算法·哈希算法
君义_noip20 小时前
信息学奥赛一本通 4150:【GESP2509七级】⾦币收集 | 洛谷 P14078 [GESP202509 七级] 金币收集
c++·算法·gesp·信息学奥赛·csp-s
摸个小yu20 小时前
【力扣LeetCode热题h100】链表、二叉树
算法·leetcode·链表