问题描述
小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌,播放后将其从歌单中移除。如果歌单中还有歌曲,则会将当前第一首歌移到最后一首。这个过程会一直重复,直到歌单中没有任何歌曲。
例如,给定歌单 [5, 3, 2, 1, 4],真实的播放顺序是 [5, 2, 4, 1, 3]。
关键点
-
播放规则:
- 播放歌单中的第一首歌,并将其从歌单中移除。
- 如果歌单中还有歌曲,则将当前第一首歌移到最后一首。
-
播放顺序的计算:
- 需要模拟整个播放过程,直到歌单中没有任何歌曲。
解决方案
我们可以通过以下步骤模拟播放过程:
-
初始化:
- 创建一个空列表
play_order来存储播放顺序。
- 创建一个空列表
-
模拟播放过程:
- 使用一个循环,直到歌单
a为空。 - 每次从歌单
a中取出第一首歌,并将其添加到play_order中。 - 如果歌单
a中还有歌曲,则将当前第一首歌移到最后一首。
- 使用一个循环,直到歌单
-
返回结果:
- 返回
play_order列表,即为真实的播放顺序。
- 返回
代码实现
def solution(n: int, a: list) -> list:
# 初始化播放顺序列表
play_order = []
# 模拟播放过程
while a:
# 播放第一首歌,并将其从歌单中移除
first_song = a.pop(0)
play_order.append(first_song)
# 如果歌单中还有歌曲,将当前第一首歌移到最后一首
if a:
a.append(a.pop(0))
return play_order
# 测试样例
print(solution(5, [5, 3, 2, 1, 4])) # 输出:[5, 2, 4, 1, 3]
总结
通过模拟播放过程,我们可以有效地计算出歌单的真实播放顺序。每次播放第一首歌并将其移除,如果歌单中还有歌曲,则将当前第一首歌移到最后一首。最终得到的 play_order 列表即为真实的播放顺序。