小R的随机播放顺序

devtools/2024/11/26 15:50:15/

问题描述

小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;
}


http://www.ppmy.cn/devtools/137156.html

相关文章

一台电脑最多支持几个分区

MBR分区表 如果硬盘使用MBR&#xff08;主引导记录&#xff09;分区表&#xff0c;最多可以支持4个主分区&#xff0c;或者3个主分区加上一个扩展分区。扩展分区内可以创建多个逻辑分区&#xff0c;但逻辑分区的数量没有限制。因此&#xff0c;在MBR分区表下&#xff0c;最多可…

代谢组数据分析(二十二):Zscore标准化后主成分分析(PCA)及热图展示

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍Z-score标准化主成分分析(Principal Component Analysis,PCA)加载R包数据下载导入数据数据预处理填补缺失值Zscore标准化PCA分析热图展示代谢物聚类簇小提琴图聚类分析总结系统信…

Java 中的 @SuppressWarnings 注解

在日常开发中,Java 编译器会给出各种警告以提示潜在问题。然而,某些情况下,这些警告可能是可以忽略的。为了避免不必要的警告影响代码可读性,Java 提供了 @SuppressWarnings 注解。本文将详细介绍该注解的使用场景、常见类型、最佳实践,以及代码实例,帮助你在开发中正确运…

【C51】单片机与LED数码管的动态显示接口案例分析

当显示位数较多时&#xff0c;静态显示所需的I/O口太多&#xff0c;这时常采用动态显示方式。动态显示方式是将所以LED数码管的段码端的相应段并接在一起&#xff0c;由一个8位I/O口控制&#xff0c;而各位显示位的公共端分别由I/O线控制&#xff0c;称为位选端。 需求&#x…

C++结构型设计模式之使用抽象工厂来创建和配置桥接模式的例子

下面是一个使用抽象工厂模式来创建和配置桥接模式的示例&#xff0c;场景是创建不同操作系统的窗口&#xff08;Window&#xff09;及其对应的实现&#xff08;WindowImpl&#xff09;。我们将通过抽象工厂来创建不同操作系统下的窗口和实现。 代码示例 #include <iostrea…

【运维】 使用 shell 脚本实现类似 jumpserver 效果实现远程登录linux 服务器

实现效果 通过序号选择登录&#xff1a; 配置证书登录 配置证书登录可以免去每次都输入密码的麻烦。详见另一篇博文&#xff1a; 【ssh】使用秘钥对&#xff08;公钥/私钥&#xff09;登录linux主机以及原理介绍 自动登录脚本 直接复用以下脚本即可&#xff0c;在 server…

排序算法 时间复杂度、空间复杂度

一、时间复杂度 1. 什么是时间复杂度 记为大O&#xff0c;是衡量算法运行效率的重要指标&#xff0c;描述了算法运行所需时间是如何随着输入规模&#xff08;通常用n来表示&#xff09;变化的&#xff08;一般&#xff09;。也可以说用来表示算法语句总的执行次数随n的增长趋…

docker 卸载与安装

卸载 查询之前安装的docker, 没有查到则不用卸载删除 yum list installed | grep docker 卸载安装包 yum remove docker-* -y 删除镜像、容器、默认挂载卷 rm -rf /var/lib/docker 安装 -ce 安装稳定版本 -y 当安装过程提示选择全部为 "yes" yum install d…