zoukankan      html  css  js  c++  java
  • [LintCode] Longest Increasing Continuous subsequence II

    Give you an integer matrix (with row size n, column size m),find the longest increasing continuous subsequence in this matrix. (The definition of the longest increasing continuous subsequence here can start at any row or column and go up/down/right/left any direction).

    Example

    Given a matrix:

    [
      [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]
    ]
    

    return 25

    Challenge

    O(nm) time and memory.

    备忘录,dp[i][j] = max{dp[i-1][j], dp[i][j-1], dp[i+1][j], dp[i][j+1]} + 1。

     1 class Solution {
     2 public:
     3     /**
     4      * @param A an integer matrix
     5      * @return  an integer
     6      */
     7     bool isValid(vector<vector<int>> &A, int x, int y) {
     8         return x >= 0 && x < A.size() && y >= 0 && y < A[0].size();
     9     }
    10     int dfs(vector<vector<int>> &A, vector<vector<int>> &dp, int x, int y) {
    11         if (dp[x][y] != -1) return dp[x][y];
    12         const int dx[4] = {0, 1, 0, -1};
    13         const int dy[4] = {1, 0, -1, 0};
    14         int tmp = 1;
    15         for (int i = 0; i < 4; ++i) {
    16             int xx = x + dx[i], yy = y + dy[i];
    17             if (isValid(A, xx, yy) && A[x][y] > A[xx][yy]) tmp = max(tmp, dfs(A, dp, xx, yy) + 1);
    18         }
    19         dp[x][y] = tmp;
    20         return dp[x][y];
    21     }
    22     int longestIncreasingContinuousSubsequenceII(vector<vector<int>>& A) {
    23         // Write your code here
    24         if (A.empty() || A[0].empty()) return 0;
    25         int res = 0;
    26         vector<vector<int>> dp(A.size(), vector<int>(A[0].size(), -1));
    27         for (int i = 0; i < A.size(); ++i) {
    28             for (int j = 0; j < A[0].size(); ++j) {
    29                 res = max(res, dfs(A, dp, i, j));
    30             }
    31         }
    32         return res;
    33     }
    34 };
  • 相关阅读:
    关于设置日期的代码
    图片拉伸方法以及修改图片渲染模式以及如何把一个控制器包装成一个导航控制器
    统一设置导航栏与状态栏代码
    CALayer加阴影后动画卡的处理办法
    Mac下显示隐藏所有文件
    删除当前目录下的所有.svn
    基础知识
    sql 学习5
    c#多线程学习
    xml序列化
  • 原文地址:https://www.cnblogs.com/easonliu/p/4586518.html
Copyright © 2011-2022 走看看