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 };
  • 相关阅读:
    git 创建一个空分支
    github page的两种类型
    hexo-theme-next
    github网页
    Linux下的CPU使用率与服务器负载的关系与区别
    mysql数据库优化日志(更)-howyue
    图片延时加载
    jQuery实现页面滚动时顶部动态显示隐藏
    TCP与UDP区别
    记一次网站服务器迁移(my)
  • 原文地址:https://www.cnblogs.com/easonliu/p/4586518.html
Copyright © 2011-2022 走看看