zoukankan      html  css  js  c++  java
  • Snake Sequence

    Problem

    You are given a grid of numbers. A snake sequence is made up of adjacent numbers such that for each number, the number on the right or the number below it is +1 or -1 its value. For example,

    1 3 2 6 8
    -9 7 1 -1 2
    1 5 0 1 9

    In this grid, (3, 2, 1, 0, 1) is a snake sequence. Given a grid, find the longest snake sequences and their lengths 

    (so there can be multiple snake sequences with the maximum length).

    Solution

     1 public int findSnakeSequence(int[][] matrix) {
     2 //        List<List<Integer>> res = ArrayList<ArrayList<Integer>>();
     3     if(matrix == null || matrix.length == 0) {
     4         return -1;
     5     }
     6     int m = matrix.length;
     7     int n = matrix[0].length;
     8     
     9     int[][] dp = new int[m][n];
    10     int globalMax = 0;
    11     
    12     //initialize
    13     dp[0][0] = 1;
    14     for(int i=1; i<n; i++) {
    15         if(Math.abs(matrix[0][i] - matrix[0][i-1]) == 1) 
    16             dp[0][i] = dp[0][i-1] + 1;
    17         else
    18             dp[0][i] = 1;
    19     }
    20     
    21     for(int i=1; i<m; i++) {
    22         if(Math.abs(matrix[i][0] - matrix[i-1][0]) == 1) 
    23             dp[i][0] = dp[i-1][0] + 1;
    24         else
    25             dp[i][0] = 1;
    26     }
    27     
    28     for(int i=1; i<m; i++) {
    29         for(int j=1; j<n; j++) {
    30             int max = 1;
    31             if(Math.abs(matrix[i][j] - matrix[i][j-1]) == 1)
    32                 max = dp[i][j-1] + 1;
    33             if(Math.abs(matrix[i][j] - matrix[i-1][j]) == 1)
    34                 max = Math.max(max, dp[i-1][j] + 1);
    35             dp[i][j] = max;
    36             globalMax = Math.max(max, globalMax);
    37         }
    38     }
    39     
    40     for (int i = 0; i < m; i++) {
    41     for (int j = 0; j < n; j++) {
    42         System.out.print(dp[i][j] + " ");
    43     }
    44     System.out.print("
    ");
    45     }
    46     
    47     return globalMax;
    48         
    49 }
  • 相关阅读:
    软件工程 实验二 结对编程(第一阶段)
    C#中的线程(一)入门
    C# Using与Try..Finally 语句探究
    中兴一面归来
    Log4Net 入门示例
    C++ 临时对象
    C宏定义探析
    MFC 对话框 快捷键设置(alt+s)
    C#中的线程(二) 线程同步基础
    Ip地址的正则表达式
  • 原文地址:https://www.cnblogs.com/superbo/p/4112177.html
Copyright © 2011-2022 走看看