74.青蛙跳格子问题

书诚小驿2025/03/04前端面经算法JavaScript

题目:青蛙跳格子问题

青蛙跳一跳,前方一百个格子如一百个数组,数组中内容有正值和负值(为青蛙跳到此处时体力增加还是减少),每次可以跳多个格子,每跳一格消耗一个体力, 问题 1:请问青蛙可以跳到一百的格子的终点吗,怎么实现的算法。 问题 2:假如青蛙每次跳过的格子为(消耗的体力为青蛙跳的格子的平方),请问可以跳到多远的距离

解题思路

能否跳到终点?

DETAILS
function canReachEnd(arr) {
  const n = arr.length;
  if (n === 0) return false;

  // 初始化动态规划数组,dp[i] 表示到达位置 i 时的最大剩余体力
  const dp = new Array(n).fill(-Infinity);
  dp[0] = arr[0]; // 初始体力为第一个格子的值

  for (let i = 0; i < n; i++) {
    if (dp[i] === -Infinity) continue; // 当前格子不可达
    for (let j = i + 1; j < n; j++) {
      const k = j - i; // 跳跃步数
      if (dp[i] >= k) {
        // 剩余体力足够跳跃
        const newEnergy = dp[i] - k + arr[j];
        if (newEnergy > dp[j]) {
          dp[j] = newEnergy; // 更新最大剩余体力
        }
      }=
    }
  }

  return dp[n - 1] !== -Infinity; // 终点是否可达
}
// 示例输入
const exampleArr = [2, -1, 3, -5, 10];

// 问题1测试
console.log(canReachEnd(exampleArr)); // 输出: true
最后更新时间' 2025/3/5 20:36:04