Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int longestLine(vector<vector<int>>& mat) {
- if(mat.size() == 0) return 0;
- int ans = 0, rows=mat.size(), cols=mat[0].size();
- int dp[cols][4];
- memset(dp, 0, sizeof dp);
- //0:horizontal, 1:vertical, 2:diagonal, 3:antidiagonal
- for(int i=0; i<rows; i++){
- int tmp = 0;
- for(int j=0; j<cols; j++){
- if(mat[i][j]){
- dp[j][0] = (j>0) ? dp[j-1][0]+1 : 1;
- dp[j][1] = (i>0) ? dp[j][1]+1 : 1;
- int prev = dp[j][2];
- dp[j][2] = (i>0 && j>0) ? tmp+1 : 1;
- tmp = prev;
- dp[j][3] = (i>0 && j<cols-1) ? dp[j+1][3]+1 : 1;
- ans = max({ans, dp[j][0], dp[j][1], dp[j][2], dp[j][3]});
- }
- else{
- tmp = dp[j][2];
- dp[j][0] = dp[j][1] = dp[j][2] = dp[j][3] = 0;
- }
- }
- }
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement