leetcode专题训练329. Longest Increasing Path in a Matrix

很简单的一道题啊,DFS加自定义比较函数的priorityqueue

import queue
class Node:
    def __init__(self, value, x, y):
        self.value = value
        self.x = x
        self.y = y
    # 按照value升序排列
    def __lt__(self, other):
        return self.value < other.value

class Solution:
    def longestIncreasingPath(self, matrix: List[List[int]]) -> int:
        row = len(matrix)
        col = len(matrix[0])
        dirs = [[0, 1], [0, -1], [1, 0], [-1, 0]]

        dis = [[0 for i in range(col)] for j in range(row)]
        
        q = queue.PriorityQueue()
        # 遍历整个矩阵,按照值排序存储索引 O(n^2 logn)
        for i in range(row):
            for j in range(col):
                q.put(Node(matrix[i][j], i, j))

        result = 1
        def DFS(i, j):
            nonlocal result
            # print(i, j)
            flag = False # 若还能更长则为True
            for di in dirs:
                tmpx = i+di[0]
                tmpy = j+di[1]
                if (tmpx >= 0 and tmpx < row) and (tmpy >= 0 and tmpy < col):
                    if matrix[tmpx][tmpy] > matrix[i][j] and dis[tmpx][tmpy] < dis[i][j]+1:
                        flag = True
                        dis[tmpx][tmpy] = dis[i][j]+1
                        DFS(tmpx, tmpy)

            if not flag:
                result = max(result, dis[i][j])
        
        while not q.empty():
            head = q.get()
            v, x, y = head.value, head.x, head.y
            if dis[x][y] == 0:
                dis[x][y] = 1
                DFS(x, y)

        return result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值