zoukankan      html  css  js  c++  java
  • 1631. 最小体力消耗路径

    你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。

    一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最大值 决定的。

    请你返回从左上角走到右下角的最小 体力消耗值 。

    示例 1:

    输入:heights = [[1,2,2],[3,8,2],[5,3,5]]
    输出:2
    解释:路径 [1,3,5,3,5] 连续格子的差值绝对值最大为 2 。
    这条路径比路径 [1,2,2,2,5] 更优,因为另一条路径差值最大值为 3 。
    

    示例 2:

    输入:heights = [[1,2,3],[3,8,4],[5,3,5]]
    输出:1
    解释:路径 [1,2,3,4,5] 的相邻格子差值绝对值最大为 1 ,比路径 [1,3,5,3,5] 更优。
    

    示例 3:

    输入:heights = [[1,2,1,1,1],[1,2,1,2,1],[1,2,1,2,1],[1,2,1,2,1],[1,1,1,2,1]]
    输出:0
    解释:上图所示路径不需要消耗任何体力。
    

    提示:

    • rows == heights.length
    • columns == heights[i].length
    • 1 <= rows, columns <= 100
    • 1 <= heights[i][j] <= 106

    用个双向队列dfs跑一下就a了

    class Solution:
        def minimumEffortPath(self, heights: List[List[int]]) -> int:
            q=deque([[0,0,0]])
            effort=[[float('inf')]*len(i) for i in heights]
            effort[0][0]=0
            while q:
                i,j,k=q.popleft()
                if k<=effort[i][j]:
                    for x,y in (i-1,j),(i,j+1),(i+1,j),(i,j-1):
                        if 0<=x<len(heights) and 0<=y<len(heights[0]):
                            z=max(k,abs(heights[x][y]-heights[i][j]))#update z
                            if z<effort[x][y]:#update effort
                                effort[x][y]=z
                                q.append((x,y,z))
            return effort[-1][-1]

    关于deque in python:deque in python

     
  • 相关阅读:
    用成员函数指针作为Callback
    在ubuntu上编译gcc会到的问题及解决方法
    异步
    棋牌游戏服务器架构: 详细设计(二) 应用层设计
    elementUI eltable添加序号列
    vue 父子组件的相互调用
    所谓编程的哲学艺术
    亲爱的百度,您带着bug翩翩走来……呃
    std::vector<point>对距离固定点的距离排序
    升级ubuntu11出现grub错误
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14343860.html
Copyright © 2011-2022 走看看