• Longest Continuance Increasing sub-sequence in matrix


    一个矩阵,求最长连续的序列长度

    [1 2 3
       4 5 6
       7 8 9]
    我的解法时用dfs遍历矩阵,如果便利过的元素就标记为false,不再遍历。
    邻居 就是上下左右
    e.g.
    1 2 3
    6 5 4 -> 7
    7 9 8
    ===================
    5 7 9
    1 2 3 -> 3
    4 6 8
    ===================
    9 8 7
    4 5 6 ->9
    3 2 1
    题目一. 只能上下左右,走到边界处止步
    题目二. 每一行/列都是一个循环,走到边界处譬如第 0 列,可以继续走到另一边界,譬如 n-1
     
     1 /*
     2  * Graph DFS
     3  * 
     4  * Find the Longest Continuance Increasing sub-sequence in 2d matrix
     5  * You could go up, down, left, right in the matrix
     6  * 
     7  */
     8 
     9 public class LIS2d {
    10     public int findLongest(int[][] matrix) {
    11         int max = 0;
    12         int m = matrix.length, n = matrix[0].length;
    13         boolean[][] visit = new boolean[m][n];
    14         for (int i = 0; i < m; i++) {
    15             for (int j = 0; j < n; j++) {
    16                 int len = helper(matrix, visit, i, j, 1);
    17                 max = max > len ? max : len;
    18             }
    19         }
    20         return max;
    21     }
    22     public int helper(int[][] matrix, boolean[][] visit, int i, int j, int step) {
    23         visit[i][j] = true;
    24         int max = step;
    25         int m = matrix.length, n = matrix[0].length;
    26 //        if (i > 0 && matrix[i-1][j] == matrix[i][j]+1 && !visit[i-1][j]) {
    27 //            int len = helper(matrix, visit, i-1, j, step+1);
    28 //            max = max > len ? max : len;
    29 //        }
    30 //        if (i < m-1 && matrix[i+1][j] == matrix[i][j]+1 && !visit[i+1][j]) {
    31 //            int len = helper(matrix, visit, i+1, j, step+1);
    32 //            max = max > len ? max : len;
    33 //        }
    34 //        if (j > 0 && matrix[i][j-1] == matrix[i][j]+1 && !visit[i][j-1]) {
    35 //            int len = helper(matrix, visit, i, j-1, step+1);
    36 //            max = max > len ? max : len;
    37 //        }
    38 //        if (j < n-1 && matrix[i][j+1] == matrix[i][j]+1 && !visit[i][j+1]) {
    39 //            int len = helper(matrix, visit, i, j+1, step+1);
    40 //            max = max > len ? max : len;
    41 //        }
    42         int r = (i-1+m) % m;
    43         int c = j;
    44         if (matrix[r][c] == matrix[i][j]+1 && !visit[r][c]) {
    45             int len = helper(matrix, visit, r, c, step+1);
    46             max = max > len ? max : len;
    47         }
    48         r = (i+1+m) % m;
    49         c = j;
    50         if (matrix[r][c] == matrix[i][j]+1 && !visit[r][c]) {
    51             int len = helper(matrix, visit, r, c, step+1);
    52             max = max > len ? max : len;
    53         }
    54         r = i;
    55         c = (j-1+n) % n;
    56         if (matrix[r][c] == matrix[i][j]+1 && !visit[r][c]) {
    57             int len = helper(matrix, visit, r, c, step+1);
    58             max = max > len ? max : len;
    59         }
    60         r = i;
    61         c = (j+1+n) % n;
    62         if (matrix[r][c] == matrix[i][j]+1 && !visit[r][c]) {
    63             int len = helper(matrix, visit, r, c, step+1);
    64             max = max > len ? max : len;
    65         }
    66         visit[i][j] = false;
    67         return max;
    68     }
    69     public static void main(String[] args) {
    70         int[][] matrix = {{5, 6, 7},
    71                           {4, 10, 9},
    72                           {3, 2, 8}};
    73         LIS2d lis = new LIS2d();
    74         System.out.println(lis.findLongest(matrix));
    75     }
    76 }
  • 相关阅读:
    浏览器F12(开发者调试工具) 功能介绍【转载】
    浏览器F12开发者工具的妙用【转载】
    linux中sed在指定字符前后添加内容
    查看TCP连接的命令【转载】
    Sql 语句删除重复项,保留id最小项
    MySQL中批量前缀表的sql语句
    【转载】登录的测试用例点
    Linux流量监控工具 – iftop
    postman接口添加断言
    测试点思考
  • 原文地址:https://www.cnblogs.com/joycelee/p/5348982.html
Copyright © 2020-2023  润新知