青训营X豆包MarsCode AI刷题-1 | 豆包MarsCode AI 刷题

46 阅读2分钟

问题描述

小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌,播放后将其从歌单中移除。如果歌单中还有歌曲,则会将当前第一首歌移到最后一首。这个过程会一直重复,直到歌单中没有任何歌曲。

例如,给定歌单 [5, 3, 2, 1, 4],真实的播放顺序是 [5, 2, 4, 1, 3]

关键点

  1. 播放规则

    • 播放歌单中的第一首歌,并将其从歌单中移除。
    • 如果歌单中还有歌曲,则将当前第一首歌移到最后一首。
  2. 播放顺序的计算

    • 需要模拟整个播放过程,直到歌单中没有任何歌曲。

解决方案

我们可以通过以下步骤模拟播放过程:

  1. 初始化

    • 创建一个空列表 play_order 来存储播放顺序。
  2. 模拟播放过程

    • 使用一个循环,直到歌单 a 为空。
    • 每次从歌单 a 中取出第一首歌,并将其添加到 play_order 中。
    • 如果歌单 a 中还有歌曲,则将当前第一首歌移到最后一首。
  3. 返回结果

    • 返回 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 列表即为真实的播放顺序。