• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

dp-最大到達距離

date: 2021-05-01 excerpt: dp-最大到達距離について

tag: algorithmdp


dp-最大到達距離の最大値について

概要

  • 最大、どこまでジャンプできるかが記述されたarrayがある時、末尾に到着可能かの判定
    • dfs, bfsで考えるとパターンが増えすぎるので無理
  • dpで直前までの記録で、どこまで到達可能かの情報を保持することでO(n)で計算できる

具体例

def solve(nums):
    dp = [-float("inf")] * len(nums)
    dp[0] = nums[0]
    for i in range(0, len(nums)):
        # 一つ手前の情報でより遠くに行けるならばその情報を採用
        if i != 0 and dp[i-1] > i:
            dp[i] = max(dp[i-1], nums[i]+i)
        else:
            # そうでないならば、nums[i]の値が最も遠くに行ける場所
            dp[i] = nums[i] + i
    dp = [v-i for i, v in enumerate(dp)]

    # 末尾を除き、0未満があれば、途中で途切れているので到達することはできない
    if any(map(lambda x: x <= 0, dp[:-1])):
        return False
    return True

assert solve([2,0,0]) == True
assert solve([0]) == True
assert solve([2,3,1,1,4]) == True
assert solve([3,2,1,0,4]) == False

参考

  • 55. Jump Game/LeetCode


algorithmdp Share Tweet