青训营X豆包MarsCode 解题:小R的随机播放顺序| 豆包MarsCode AI刷题

59 阅读2分钟

1.题目描述

问题描述

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

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

保证歌曲中的id两两不同。

示例1

输入:n = 6 ,a = [1, 2, 3, 4, 5, 6] 输出:[1, 3, 5, 2, 6, 4]

示例2

输入:n = 5 ,a = [5, 3, 2, 1, 4] 输出:[5, 2, 4, 1, 3]

难度等级

中等

题目链接

小R的随机播放顺序 - MarsCode

2.解题思路

本题我想到的方法是创建一个新的列表,原列表进行第一个元素变成最后一个元素的操作,然后操作后再加入新列表。 先加入原列表第一个元素,给新列表第一个元素后记得原列表要出列该元素

qu=[]
qu.append(a[0])
a.pop(0)

遍历原列表,操作原列表:让第一个元素出列在加到队尾;再把原列表现在的第一个元素加入到新列表,最后返回新列表。

for i in range(len(a)):
    x=a.pop(0)
    a.append(x)
    qu.append(a[0])
    a.pop(0)

*列表方法1.append()列表后面添加元素;2.insert()指定位置添加元素 insert(int'index',要添加的元素);3.pop()删除元素pop() #删除list末尾的元素pop(int'index') #删除索引index的元素;4.count()返回的是某个元素在列表里面的个数;5.extend() 合并列表list1.extend(list2) #在列表1后面添加列表2;6.index()返回的是元素在列表中的第一个位置,不管第二个;7.remove()删除某个元素,如果有重复,删除的是第一次出现的元素,如果元素不存在会报错;8.sort()进行排序(从小到大 int类型)可以对字母进行排序(ASCII值)类型不能混;9.reverse()将列表进行翻转;10.clear() 清除元素;11.copy() 浅拷贝对象,不等同于 =,地址不一样。

3.代码实现

def solution(n: int, a: list) -> list:
    # write code here
    qu=[]//创立一个新列表
    qu.append(a[0])//先加入原列表第一个元素
    a.pop(0)//给新列表第一个元素后记得原列表要出列该元素
    for i in range(len(a))://遍历
        x=a.pop(0)
        a.append(x)//把第一个元素出列在加到队尾
        qu.append(a[0])
        a.pop(0)//再同开始操作
    return qu//返回新列表

if __name__ == '__main__':
    print(solution(n = 5, a = [5, 3, 2, 1, 4]) == [5, 2, 4, 1, 3])
    print(solution(n = 4, a = [4, 1, 3, 2]) == [4, 3, 1, 2])
    print(solution(n = 6, a = [1, 2, 3, 4, 5, 6]) == [1, 3, 5, 2, 6, 4])

4.总结

以上是我对这道题的解法,主要运用列表的性质,有更好的方法希望可以指教,谢谢你观看到这里,祝大家刷题顺利。