bluecode-机器人能量冒险

39 阅读1分钟

问题描述

小R设计了一款有趣的机器人,它每次移动时至少需要消耗一个能量值。假设当小R为机器人提供了 5 个能量值,它可以选择不动,也可以走 1 步,但它不会走超过 5 步。
小R希望机器人能够走到一个终点,该终点位于 N 个位置的最后一个位置。每个位置上都有一定的能量值,机器人每次消耗当前位置的能量值可以往前走几步,之后可以继续消耗新的位置的能量继续前进。如果某个位置的能量值为 0,机器人将无法再继续行动。
小R想知道,机器人是否有可能通过这些能量值移动到最后一个位置。你能帮他计算一下吗?


测试样例

样例1:

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

样例2:

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

样例3:

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


#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

std::string solution(int n, std::vector<int> array) {
  int max_reach = 0;
  for (int i = 0; i < n; ++i) {
    if (i > max_reach) {
      return "FALSE";
    }

    max_reach = max(max_reach, i + array[i]);
    if (max_reach >= n - 1) {
      return "TRUE";
    }
  }

  return "FALSE";
}

int main() {
  // Add your test cases here

  std::cout << (solution(5, {2, 3, 1, 1, 4}) == "TRUE") << std::endl;
  std::cout << (solution(5, {3, 2, 1, 0, 4}) == "FALSE") << std::endl;

  return 0;
}