前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 1340. Jump Game V

Leetcode 1340. Jump Game V

作者头像
Tyan
发布2021-08-13 11:43:35
2450
发布2021-08-13 11:43:35
举报
文章被收录于专栏:SnailTyan

1. Description

Jump Game V
Jump Game V

2. Solution

**解析:**Version 1,采用深度优先搜索,使用visited记录遍历过的索引及对应的跳跃次数,如果当前索引遍历过,直接返回对应的跳跃次数,分别遍历其左右两侧,取左右两侧最大的跳跃次数,返回最大跳跃次数加上当前元素的跳跃次数1。Version 2对数组先排序,获得排序后的索引,然后从最小值的索引开始寻找左右两侧最大跳跃次数,这样每个数左右两侧比其小的数的跳跃次数都已计算出来,所有元素的初始默认跳跃次数为1,依次更新dp[current],最后返回最大跳跃次数。

  • Version 1
代码语言:javascript
复制
class Solution:
    def maxJumps(self, arr: List[int], d: int) -> int:
        stat = {}
        n = len(arr)
        visited = {}
        nums = 0
        for i in range(n):
            nums = max(nums, self.dfs(arr, i, visited, d))
        return nums


    def dfs(self, arr, current, visited, d):
        if current in visited:
            return visited[current]
        n = len(arr)
        count = 0
        i = current - 1
        thres = max(-1, current - d - 1)
        while i > thres and arr[i] < arr[current]:
            temp = self.dfs(arr, i, visited, d)
            visited[i] = temp
            count = max(count, temp)
            i -= 1
        i = current + 1
        thres = min(n, current + d + 1)
        while i <  thres and arr[i] < arr[current]:
            temp = self.dfs(arr, i, visited, d)
            visited[i] = temp
            count = max(count, temp)
            i += 1
        return count + 1
  • Version 2
代码语言:javascript
复制
class Solution:
    def maxJumps(self, arr: List[int], d: int) -> int:
        indexes = sorted(range(len(arr)), key=lambda i: arr[i])
        n = len(arr)
        dp = [1] * n
        nums = 0
        for current in indexes:
            i = current - 1
            thres = max(-1, current - d - 1)
            count = 0
            while i > thres and arr[i] < arr[current]:
                count = max(count, dp[i])
                i -= 1
            i = current + 1
            thres = min(n, current + d + 1)
            while i < thres and arr[i] < arr[current]:
                count = max(count, dp[i])
                i += 1
            dp[current] += count
            nums = max(nums, dp[current])
        return nums

Reference

  1. https://leetcode.com/problems/jump-game-v/
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Description
  • 2. Solution
  • Reference
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档