LintCode 398 [Longest Increasing Continuous Subsequence II]

原题

给定一个整数矩阵(其中,有 n 行, m 列),请找出矩阵中的最长上升连续子序列。(最长上升连续子序列可从任意行或任意列开始,向上/下/左/右任意方向移动)。

样例
给定一个矩阵

[
  [1 ,2 ,3 ,4 ,5],
  [16,17,24,23,6],
  [15,18,25,22,7],
  [14,19,20,21,8],
  [13,12,11,10,9]
]

返回 25

解题思路

  • 类似于滑雪问题
  • 记忆化搜索 - 因为对于某一个点,可以从上下左右更新,所以很难写出for循环那种DP
  • 所谓记忆化所有,就是当我想更新matrix[x][y]的时候,我需要知道以matrix[x-1][y], matrix[x][y-1], matrix[x+1][y], matrix[x][y+1]这四个点结尾的最大长度,每次求出以matrix某个点结尾的连续的最大长度之后,都记录下来,下一次先去记忆的matrix中找,没有再算,有的话直接返回值

完整代码

class Solution:
    # @param {int[][]} A an integer matrix
    # @return {int}  an integer
    DIRECTIONS = [(1, 0), (0, 1), (0, -1), (-1, 0)]
    def longestIncreasingContinuousSubsequenceII(self, A):
        # Write your code here
        if len(A) == 0 or len(A[0]) == 0:
            return 0
        self.width = len(A[0])
        self.height = len(A)
        self.matrix = [[0 for i in range(self.width)] for j in range(self.height)]
        for i in range(self.height):
            for j in range(self.width):
                self.search(A, i, j)
        return max(max(row) for row in self.matrix)
    
    def search(self, A, x, y):
        if self.matrix[x][y] != 0:
            return self.matrix[x][y]
        
        longest = 1
        for dx, dy in self.DIRECTIONS:
            if x + dx < 0 or x + dx >= self.height:
                continue
            if y + dy < 0 or y + dy >= self.width:
                continue
            if A[x][y] >= A[x + dx][y + dy]:
                continue
            longest = max(longest, self.search(A, x + dx, y + dy) + 1)
        self.matrix[x][y] = longest
        return self.matrix[x][y]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,327评论 0 18
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,769评论 0 33
  • 定义一组子问题,按照由小到大,以小问题的解答支持大问题求解的模式,依次解决所有的子问题,并最终得到原问题的解答。 ...
    芥丶未央阅读 913评论 0 2
  • 1 前言 OpenGL渲染3D模型离不开空间几何的数学理论知识,而本篇文章的目的就是对空间几何进行简单的介绍,并对...
    RichardJieChen阅读 7,142评论 1 11
  • 回想过去一年感觉过得好快,但是这个冬季是那么冥顽不化,骂它十九辈亲大爷都不带走的!露脚踝、漏肚脐、篓大长腿、...
    彦泽兄台阅读 224评论 0 0