thảo luận Leetcode mỗi ngày

  • Người tạo chủ đề Người tạo chủ đề _Gia_Cat_Luong_
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
lộ profile đi đâu cũng bị soi, khổ thật, :beat_brick:
Cho cảnh sát soi mới tiến bộ nhanh được
zFNuZTA.gif


via theNEXTvoz for iPhone
 
bác này mình cũng soi solution tìm profile, xong quay qua thớt contest thấy tự ghi profile ngay page 1 =]] .

btw, nhờ thớt này mà em đã nâng đc privileges, giờ viết bài vào room Tuyển dụng & Tìm việc đc rồi, thanks các bác.
Thớt này có @Cố Trường Ca làm logistic vô cày mấy tháng, spam khí thế xong kiếm đc job ngon lặn mất tăm ko phát card cho ae gì cả
BdgiW7R.gif
g8XXj8u.gif


via theNEXTvoz for iPhone
 
sau tết mới bắt đầu làm nên chưa đủ:too_sad: tháng 11 năm ngoái vẫn chưa biết sliding window là gì. nhờ các khóa học của @billy_don, bác phi đôm, bác a nô mà h e đã tự tin reverse linked list = 3 cách khác nhau :sweet_kiss:
 
Python:
class Solution:
    def maxMoves(self, grid: List[List[int]]) -> int:
        m = len(grid)
        n = len(grid[0])
        directions = [[-1, 1], [0, 1], [1, 1]]
        @lru_cache(None)
        def dfs(r, c):
            moves = 0
            for dx, dy in directions:
                nx = dx + r
                ny = dy + c
                if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] > grid[r][c]:
                    moves = max(moves, 1 + dfs(nx, ny))

            return moves

        ans = 0
        for i in range(m):
            ans = max(ans, dfs(i, 0))

        return ans
 
Python:
class Solution:
    def maxMoves(self, grid: List[List[int]]) -> int:
        m = len(grid)
        n = len(grid[0])
        print(n, m)
        dp = [ [0 for _ in range(n)] for _ in range(m)]
        result = 1
        for i in range(m):
            dp[i][0] = 1
        
        for j in range(1, n):
            for i in range(m):
                if i >= 1 and grid[i][j] > grid[i-1][j-1] and dp[i-1][j-1]:
                    dp[i][j] = max(dp[i][j], dp[i-1][j-1] + 1)

                if grid[i][j] > grid[i][j-1] and dp[i][j-1]:
                    dp[i][j] = max(dp[i][j], dp[i][j-1] + 1)

                if i + 1 < m and grid[i][j] > grid[i+1][j-1] and dp[i+1][j-1]:
                    dp[i][j] = max(dp[i][j], dp[i+1][j-1] + 1)
                result = max(result, dp[i][j])

        return result - 1
 
C++:
class Solution {
public:
    int maxMoves(vector<vector<int>>& grid) {
        
        int m = grid.size(), n = grid[0].size();
        vector<vector<int>> dp(m, vector<int>(n, INT_MIN));

        int ans = 0;

        for (int j = 0; j < n; j++) {
            for (int i = 0; i < m; i++) {
                if (j == 0) dp[i][j] = 0;
                if (i - 1 >= 0 && j - 1 >= 0 && grid[i][j] > grid[i-1][j-1]) {
                    dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1);
                }
                if (j - 1 >= 0 && grid[i][j] > grid[i][j-1]) {
                    dp[i][j] = max(dp[i][j], dp[i][j - 1] + 1);
                }
                if (i + 1 < m && j - 1 >= 0 && grid[i][j] > grid[i+1][j-1]) {
                    dp[i][j] = max(dp[i][j], dp[i + 1][j - 1] + 1);
                }
                ans = max(ans, dp[i][j]);
            }
        }

        return ans;
    }
};
 
Python:
class Solution:
    def maxMoves(self, grid: List[List[int]]) -> int:
        m, n = len(grid), len(grid[0])
        dp = [[0] * (n) for _ in range(m)]

        for i in range(m):
            dp[i][0] = 1

        result = 0
        for j in range(1, n):
            for i in range(m):
                if i > 0 and grid[i][j] > grid[i-1][j - 1] and dp[i-1][j-1] > 0 and dp[i][j] < dp[i-1][j-1] + 1:
                    dp[i][j] = dp[i-1][j-1] + 1
                if grid[i][j] > grid[i][j - 1] and dp[i][j-1] > 0 and dp[i][j] < dp[i][j-1] + 1:
                    dp[i][j] = dp[i][j-1] + 1
                if i + 1 < m and grid[i][j] > grid[i+1][j - 1] and dp[i+1][j-1] > 0 and dp[i][j] < dp[i+1][j-1] + 1:
                    dp[i][j] = dp[i+1][j-1] + 1
                result = max(result, dp[i][j] - 1)

        return result
 
C++:
class Solution {
public:
   int maxMoves(vector<vector<int>>& grid) {
       int m = grid.size(), n = grid[0].size(), ans = 0;
       vector<vector<int>> dp(m, vector<int>(n, -1));
      
       for(int i = 0; i < m; i++) dp[i][0] = 0;
      
       for(int j = 1; j < n; j++) {
           for(int i = 0; i < m; i++) {
               if(i > 0 && dp[i-1][j-1] != -1 && grid[i][j] > grid[i-1][j-1]) {
                   dp[i][j] = max(dp[i][j], dp[i-1][j-1] + 1);
               }
               if(dp[i][j-1] != -1 && grid[i][j] > grid[i][j-1]) {
                   dp[i][j] = max(dp[i][j], dp[i][j-1] + 1);
               }
               if(i+1 < m && dp[i+1][j-1] != -1 && grid[i][j] > grid[i+1][j-1]) {
                   dp[i][j] = max(dp[i][j], dp[i+1][j-1] + 1);
               }
               ans = max(ans, dp[i][j]);
           }
       }
      
       return ans;
   }
};
 
Python:
class Solution:
    def maxMoves(self, grid: List[List[int]]) -> int:
        moves = [-1, 0, 1]
        h, w = len(grid), len(grid[0])
        def dfs(i, j, grid, dp):
            if dp[i][j] != -1:
                return dp[i][j]
            max_move = 0
            for move in moves:
                ii, jj = i + move, j + 1
                if 0 <= ii < h and jj < w and grid[ii][jj] > grid[i][j]:
                    max_move = max(max_move, 1 + dfs(ii, jj, grid, dp))
            dp[i][j] = max_move
            return dp[i][j]
        dp = [[-1] * w for _ in range(h)]
        max_move = 0
        for i in range(h):
            max_move = max(max_move, dfs(i, 0, grid, dp))
        return max_move
 
Python:
class Solution:
    def maxMoves(self, grid: List[List[int]]) -> int:
        m = len(grid)
        n = len(grid[0])
        directions = [[-1, 1], [0, 1], [1, 1]]
        @lru_cache(None)
        def dfs(r, c):
            moves = 0
            for dx, dy in directions:
                nx = dx + r
                ny = dy + c
                if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] > grid[r][c]:
                    moves = max(moves, 1 + dfs(nx, ny))

            return moves

        ans = 0
        for i in range(m):
            ans = max(ans, dfs(i, 0))

        return ans
dùng mảng directions code clean hơn hẳn :big_smile:
 
Java:
class Solution {
    public int maxMoves(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        int[][] move = new int[m][n];
        for (int i = 0; i < m; i++) {
            move[i][0] = 0;
        }
        int res = 0;
        for (int j = 1; j < n; j++) {
            for (int i = 0; i < m; i++) {
                if(move[i][j-1] >=0 && grid[i][j]> grid[i][j-1])
                {
                    move[i][j] = move[i][j-1]+1;
                    res= Math.max(res,move[i][j]);
                    continue;
                }
                if(i>0){
                    if(move[i-1][j-1] >=0 && grid[i][j]> grid[i-1][j-1]){
                        move[i][j] = move[i-1][j-1]+1;
                        res= Math.max(res,move[i][j]);
                        continue;
                    }
                }
                if(i<m-1){
                    if(move[i+1][j-1] >=0 && grid[i][j]> grid[i+1][j-1])
                    {
                       move[i][j] = move[i+1][j-1]+1;
                       res= Math.max(res,move[i][j]);
                       continue;
                    }
                }
                move[i][j]=-1;
            }
        }
        return res;
    }
}
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
_Gia_Cat_Luong_,
Người trả lời cuối
Vipluckystar,
Trả lời
17.755
Lượt xem
1.213.926
Quay lại
Lên đầu trang