小R的随机播放顺序、游戏英雄升级潜力评估 | 豆包MarsCode AI刷题

125 阅读3分钟

今天又做了两道豆包MarsCode AI刷题题库中的题:小R的随机播放顺序、游戏英雄升级潜力评估,分享一下我的解答过程。

小R的随机播放顺序

问题描述

小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]

解题思路

创建一个空列表存储真正播放顺序,使用while循环,播放列表还有歌的时候,进行操作:弹出歌单第一个元素并加入到真正顺序列表中;弹出歌单第一个元素并插入到歌单最后。特殊情况是播放列表只剩一首歌时,直接弹出并加入真正播放顺序,结束循环。

代码实现

def solution(n: int, a: list) -> list:
    order = []
    while len(a) != 0:
        order.append(a.pop(0))
        if len(a) == 1:
            order.append(a.pop(0))
            break
        a.append(a.pop(0))
    return order

游戏英雄升级潜力评估

问题描述

小U在一款挂机游戏中拥有n个英雄。游戏中有一种历练升级机制,每天可以选择两个英雄进行历练,如果两位英雄的等级相同,则他们的等级都不会改变。如果英雄等级不同,那么等级较高的英雄会增加1级,而等级较低的英雄则保持不变。

小U希望至少有一个英雄能够达到2000000000000000级,他想知道有多少英雄有潜力通过历练达到这个等级。

测试样例

样例1:

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

样例2:

输入:n = 4 ,u = [100000, 100000, 100000, 100000]
输出:0

样例3:

输入:n = 6 ,u = [1, 1, 1, 2, 2, 2]
输出:3

解题思路

刚开始看问题描述里有个贼大的数字还吓了一跳,结果发现逻辑很简单,只要能跟其他英雄产生等级差的英雄就能够达到2000000000000000级。首先对数组a进行排序,方便挑选初始等级最高的英雄。使用一个while循环,当数组a长度大于1时,进行操作:比较最大等级和最小等级。若不相等,最大等级可以通过每天跟最小等级的历练达到目标等级,于是count加一,并将该英雄弹出,进行下一次循环(感觉等级最低的那个英雄好惨,可以当所有人的沙包……)。若相等,说所有英雄等级都一样,大家都没法升级,结束循环。

代码实现

def solution(n: int, u: list) -> int:
    u.sort()
    if u[0] == u[-1]:
        return 0
    count = 0
    while len(u) > 1:
        if u[0] != u[-1]:
            count += 1
            u.pop(-1)
        else:
            break
    return count