【备战字节面试】算法特训-BFS/DFS

208 阅读1分钟

简单粗暴,记录备战过程,持续更新

BFS/DFS

适用场景

实战

实战1 752. 打开转盘锁

实战2 100. 相同的树


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p == null && q == null){
            return true;
        }
        if(p == null || q == null){
            return false;
        }
        boolean left  = isSameTree(p.left,q.left);
        boolean right = isSameTree(p.right,q.right);

        return p.val == q.val && left == true && right == true ? true : false;
    }
}

实战3 695. 岛屿的最大面积

class Solution {
    public int maxAreaOfIsland(int[][] grid) {
        int ans = 0 ;
        for(int i = 0; i< grid.length ; i++){
            for(int j= 0 ; j < grid[i].length ; j++){
                ans = Math.max(maxArea(grid,i,j),ans);
            }   
        }
        return ans;
    }

    private int maxArea(int[][] grid, int i, int j){
        if(i < 0 || i >= grid.length || j < 0 || j >= grid[i].length || grid[i][j] == 0){
            return 0;
        }
        grid[i][j] = 0;
        int ans = 1;
        int left = maxArea(grid, i, j-1 );
        int right = maxArea(grid, i, j+1 );
        int up = maxArea(grid, i-1, j );
        int dowm = maxArea(grid, i+1, j );
        return ans + left + right + up + dowm;
    }
}