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 };
  • 相关阅读:
    PgSQL定时备份
    如何从源码包安装软件?
    PostgreSQL PointInTime Recovery (Incremental Backup)
    Better PostgreSQL backups with WAL archiving
    安装GTK全攻略
    WEB前端开发规范文档
    Linux开机自动启动脚本方法
    安装编译postgresql与pgagent的相关操作
    PostgreSQL: 如何查询表的创建时间?
    什么是编程
  • 原文地址:https://www.cnblogs.com/easonliu/p/4586518.html
Copyright © 2011-2022 走看看