June 12:Weekly Journal Board

201 阅读1分钟

伤情最是晚凉天,憔悴厮人不堪怜。邀酒催肠三杯醉,寻香惊梦五更寒。钗头凤斜卿有泪,荼蘼花了我无缘。小楼寂寞新雨月,也难如钩也难圆。

2022年6月7日

BFS - 广度优先算法(Breadth First Search)

BFS 常用于在 遍历最短路径 的情况,BFS 代码模板如下:


/**
 * Return the length of the shortest path between root and target node.
 */
int BFS(Node root, Node target) {
    Queue<Node> queue;  // store all nodes which are waiting to be processed
    int step = 0;       // number of steps neeeded from root to current node
    // initialize
    add root to queue;
    // BFS
    while (queue is not empty) {
        step = step + 1;
        // iterate the nodes which are already in the queue
        int size = queue.size();
        for (int i = 0; i < size; ++i) {
            Node cur = the first node in queue;
            return step if cur is target;
            for (Node next : the neighbors of cur) {
                add next to queue;
            }
            remove the first node from queue;
        }
    }
    return -1;          // there is no path from root to target
}

有时,确保我们永远 不会访问一个结点两次 很重要。否则,我们可能陷入无限循环。如果是这样,我们可以在上面的代码中添加一个 哈希集 来解决这个问题:


/**
 * Return the length of the shortest path between root and target node.
 */
int BFS(Node root, Node target) {
    Queue<Node> queue;  // store all nodes which are waiting to be processed
    Set<Node> used;     // store all the used nodes
    int step = 0;       // number of steps neeeded from root to current node
    // initialize
    add root to queue;
    add root to used;
    // BFS
    while (queue is not empty) {
        step = step + 1;
        // iterate the nodes which are already in the queue
        int size = queue.size();
        for (int i = 0; i < size; ++i) {
            Node cur = the first node in queue;
            return step if cur is target;
            for (Node next : the neighbors of cur) {
                if (next is not in used) {
                    add next to queue;
                    add next to used;
                }
            }
            remove the first node from queue;
        }
    }
    return -1;          // there is no path from root to target
}

Leetcode 200. 岛屿数量

2022年6月8日

Leetcode 279. 完全平方数

2022年6月9日

Leetcode 155. 最小栈

2022年6月10日

2022年6月11日

20. 有效的括号

2022年6月12日