Advertisement
nikunjsoni

562

Jun 9th, 2021
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int longestLine(vector<vector<int>>& mat) {
  4.         if(mat.size() == 0) return 0;
  5.         int ans = 0, rows=mat.size(), cols=mat[0].size();
  6.         int dp[cols][4];
  7.         memset(dp, 0, sizeof dp);
  8.        
  9.         //0:horizontal, 1:vertical, 2:diagonal, 3:antidiagonal
  10.         for(int i=0; i<rows; i++){
  11.             int tmp = 0;
  12.             for(int j=0; j<cols; j++){
  13.                 if(mat[i][j]){
  14.                     dp[j][0] = (j>0) ? dp[j-1][0]+1 : 1;
  15.                     dp[j][1] = (i>0) ? dp[j][1]+1 : 1;
  16.                     int prev = dp[j][2];
  17.                     dp[j][2] = (i>0 && j>0) ? tmp+1 : 1;
  18.                     tmp =  prev;
  19.                     dp[j][3] = (i>0 && j<cols-1) ? dp[j+1][3]+1 : 1;
  20.                     ans = max({ans, dp[j][0], dp[j][1], dp[j][2], dp[j][3]});
  21.                 }
  22.                 else{
  23.                     tmp = dp[j][2];
  24.                     dp[j][0] = dp[j][1] = dp[j][2] = dp[j][3] = 0;
  25.                 }
  26.             }
  27.         }
  28.         return ans;
  29.     }
  30. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement