机器人能量冒险 | 豆包MarsCode AI刷题

84 阅读4分钟

为了解决这个问题,我们需要判断机器人是否能够通过消耗每个位置上的能量值移动到最后一个位置。我们可以使用贪心算法来解决这个问题。具体步骤如下:

  1. 从最后一个位置开始,向前遍历每个位置。
  2. 对于每个位置,检查从该位置出发,是否能够到达或超过最后一个位置。
  3. 如果可以,那么将该位置标记为可以到达最后一个位置的位置。
  4. 继续向前遍历,直到第一个位置。
  5. 如果第一个位置被标记为可以到达最后一个位置的位置,那么机器人可以移动到最后一个位置,否则不能。

现在,我们来分析每个样例:

样例1

输入:n = 5, array = [2, 3, 1, 1, 4] 输出:'TRUE'

在这个样例中,我们从最后一个位置开始,向前遍历每个位置:

  • 位置5:能量值为4,可以到达位置5+4=9,超过最后一个位置,所以位置5可以到达最后一个位置。
  • 位置4:能量值为1,可以到达位置4+1=5,到达最后一个位置,所以位置4可以到达最后一个位置。
  • 位置3:能量值为1,可以到达位置3+1=4,到达位置4,位置4可以到达最后一个位置,所以位置3可以到达最后一个位置。
  • 位置2:能量值为3,可以到达位置2+3=5,到达最后一个位置,所以位置2可以到达最后一个位置。
  • 位置1:能量值为2,可以到达位置1+2=3,到达位置3,位置3可以到达最后一个位置,所以位置1可以到达最后一个位置。

因为第一个位置被标记为可以到达最后一个位置的位置,所以机器人可以移动到最后一个位置。

样例2

输入:n = 5, array = [3, 2, 1, 0, 4] 输出:'FALSE'

在这个样例中,我们从最后一个位置开始,向前遍历每个位置:

  • 位置5:能量值为4,可以到达位置5+4=9,超过最后一个位置,所以位置5可以到达最后一个位置。
  • 位置4:能量值为0,无法移动,所以位置4无法到达最后一个位置。
  • 位置3:能量值为1,可以到达位置3+1=4,但位置4无法到达最后一个位置,所以位置3无法到达最后一个位置。
  • 位置2:能量值为2,可以到达位置2+2=4,但位置4无法到达最后一个位置,所以位置2无法到达最后一个位置。
  • 位置1:能量值为3,可以到达位置1+3=4,但位置4无法到达最后一个位置,所以位置1无法到达最后一个位置。

因为第一个位置没有被标记为可以到达最后一个位置的位置,所以机器人无法移动到最后一个位置。

样例3

输入:n = 6, array = [1, 2, 3, 4, 0, 0] 输出:'TRUE'

在这个样例中,我们从最后一个位置开始,向前遍历每个位置:

  • 位置6:能量值为0,无法移动,所以位置6无法到达最后一个位置。
  • 位置5:能量值为0,无法移动,所以位置5无法到达最后一个位置。
  • 位置4:能量值为4,可以到达位置4+4=8,超过最后一个位置,所以位置4可以到达最后一个位置。
  • 位置3:能量值为3,可以到达位置3+3=6,到达位置6,位置6无法到达最后一个位置,所以位置3无法到达最后一个位置。
  • 位置2:能量值为2,可以到达位置2+2=4,到达位置4,位置4可以到达最后一个位置,所以位置2可以到达最后一个位置。
  • 位置1:能量值为1,可以到达位置1+1=2,到达位置2,位置2可以到达最后一个位置,所以位置1可以到达最后一个位置。

因为第一个位置被标记为可以到达最后一个位置的位置,所以机器人可以移动到最后一个位置。

综上所述,我们可以通过从后向前遍历每个位置,检查从该位置出发是否能够到达或超过最后一个位置,来判断机器人是否能够移动到最后一个位置。

def solution(n, array):
    max_reachable = 0
    for i in range(n):
        if i > max_reachable:
            return 'FALSE'
        max_reachable = max(max_reachable, i + array[i])
        
        if max_reachable >= n - 1:
            return 'TRUE'

    return 'FALSE'


if __name__ == "__main__":
    # Add your test cases here

    print(solution(5, [2, 3, 1, 1, 4]) == "TRUE")
    print(solution(5, [3, 2, 1, 0, 4]) == "FALSE")