[Leetcode算法学习]:Leetcode模块Queue & Stack部分总结

Leetcode中的Queue & Stack部分学习总结

Stack部分:733. Flood fill

以下代码可以作为DFS的新范式进行参考,代码较为简洁(毕竟头条写DFS模板时候被喷冗余的那一幕仍然历历在目= =)。

class Solution():
    def floodFill(self, image, sr, sc, newColor):
        if len(image) == 0:
            return image
        elif image[sr][sc] == newColor:
            return image

        self.fill(image, sr, sc, newColor, image[sr][sc])
        return image

    def fill(self, image, sr, sc, newColor, color):
        # 进入递归之前,先判断传入坐标合不合法,否则直接返回。
        if (sr < 0) or (sr > len(image) - 1) or (sc < 0) or (sc > len(image[0]) - 1) or (image[sr][sc] != color):
            return

        image[sr][sc] = newColor
        self.fill(image, sr-1, sc, newColor, color)
        self.fill(image, sc+1, sc, newColor, color)
        self.fill(image, sc, sr-1, newColor, color)
        self.fill(image, sc, sr+1, newColor, color)
        return

Queue部分:752. Open The Lock

以下题目作为BFS的范式进行参考,BTW,BFS的题目貌似做的比较少,应该要多多练习才行。

# 这里使用了Python原生collections中的dequeue类,也是双端队列高效的实现。
import collections
class Solution(object):
    def openLock(self, deadends, target):
        if target is None or target in deadends:
            return -1

        # Storing all deadends in a hash table
        deadends, visited, level = set(deadends), set(), 0
        queue = collections.deque()

        # Breath first search for the target
        queue.append("0000")

        while(len(queue) != 0):
            currSize, level = len(queue), level + 1

            for i in range(currSize):
                node = queue.popleft()

                # Early stop
                if node in deadends or node in visited:
                    continue

                # Current node possible adjacent nodes
                possibleLocks = []
                for i in range(4):
                    possibleLocks.append(node[:i] + str((int(node[i]) + 1) % 10) + node[(i+1):] )
                    possibleLocks.append(node[:i] + str((int(node[i]) + 9) % 10) + node[(i+1):] )

                # Travsel the possible nodes
                for j in possibleLocks:
                    if j == target:
                        return level
                    elif j not in deadends and j not in visited:
                        queue.append(j)
                visited.add(node)
        return -1

待续...

原文地址:https://www.cnblogs.com/GradientBoosted/p/11328387.html

时间: 2024-11-14 12:54:31

[Leetcode算法学习]:Leetcode模块Queue & Stack部分总结的相关文章

LeetCode算法题-Min Stack(Java实现)

这是悦乐书的第177次更新,第179篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第36题(顺位题号是155).设计一个支持push,pop,top和在恒定时间内检索最小元素的堆栈. push(x) - 将元素x推入堆栈. pop() - 删除堆栈顶部的元素. top() - 获取顶部元素. getMin() - 检索堆栈中的最小元素. 例如: MinStack minStack = new MinStack(); minStack.push(-2); minSta

算法面试课程笔记000 玩转算法面试 leetcode题库分门别类详细解析

算法面试课程笔记 =============================================================================== 本文地址 : =============================================================================== liuyubobobo老师 <<玩转算法面试 leetcode题库分门别类详细解析>> 为了面试,更为了提升你的算法思维 http:/

LeetCode算法题-N-ary Tree Level Order Traversal(Java实现)

这是悦乐书的第225次更新,第238篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第92题(顺位题号是429).给定n-ary树,返回其节点值的级别顺序遍历.(即,从左到右,逐级).例如,给定一个3-ary树: 我们应该返回它的级别顺序遍历: [[1],[3,2,4][5,6]] 注意: 树的深度最多为1000. 节点总数最多为5000. 本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试. 02

LeetCode算法题-Next Greater Element I(Java实现)

这是悦乐书的第244次更新,第257篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第111题(顺位题号是496).你有两个数组(没有重复)nums1和nums2,其中nums1的元素是nums2的子集.在nums2的相应位置找到nums1元素的所有下一个更大的数字.nums1中的数字x的下一个更大数字是nums2中右边第一个更大的数字.如果它不存在,则输出该数字的-1.例如: 输入:nums1 = [4,1,2],nums2 = [1,3,4,2]. 输出:[-1,

LeetCode算法题-Find Mode in Binary Search Tree(Java实现)

这是悦乐书的第246次更新,第259篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501).给定具有重复项的二叉搜索树(BST),找到给定BST中的所有模式(最常出现的元素).假设BST定义如下: 节点的左子树仅包含键小于或等于节点键的节点. 节点的右子树仅包含键大于或等于节点键的节点. 左右子树也必须是二叉搜索树. 例如: 鉴于BST [1,null,2,2], 1 2 / 2 返回[2]. 注意:如果树有多个模式,您可以按任何顺序返回它们.

LeetCode算法题-Convert BST to Greater Tree(Java实现)

这是悦乐书的第255次更新,第268篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第122题(顺位题号是538).给定二进制搜索树(BST),将其转换为更大树,使原始BST的每个键都更改为原始键加上所有键的总和大于BST中的原始键.例如: 输入:二进制搜索树的根,如下所示: 5 / 2 13 输出:大树的根,如下所示: 18 / 20 13 本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试. 0

LeetCode算法题-Subtree of Another Tree(Java实现)

这是悦乐书的第265次更新,第278篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第132题(顺位题号是572).给定两个非空的二进制树s和t,检查树t是否具有完全相同的结构和具有子树s的节点值. s的子树是一个树,由s中的节点和所有节点的后代组成. 树也可以被视为自己的子树.例如: 鉴于树s: 3 / 4 5 / 1 2 鉴于树t: 4 / 1 2 返回true,因为t具有相同的结构和节点值,其子树为s. 鉴于树s: 3 / 4 5 / 1 2 / 0 鉴于树t:

LeetCode算法题-Average of Levels in Binary Tree(Java实现)

这是悦乐书的第277次更新,第293篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第145题(顺位题号是637).给定一个非空二叉树,以数组的形式返回每一层节点值之和的平均值.例如: 3 / 9 20 / 15 7 输出:[3,14.5,11] 说明:第一层上的节点的平均值为3,第二层上的节点的平均值为14.5,第三层上的节点的平均值为11.因此返回[3,14.5,11]. 注意:节点值的范围在32位有符号整数的范围内. 本次解题使用的开发工具是eclipse,jd

LeetCode算法题-Flood Fill(Java实现)

这是悦乐书的第306次更新,第325篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是733).图像由二维整数数组表示,每个整数表示图像的像素值(从0到65535).给定表示泛洪填充的起始像素(行和列)的坐标(sr,sc)和像素值newColor,进行"泛洪填充"图像. 要执行"泛洪填充",请考虑起始像素,以及与起始像素相同颜色的起始像素4向连接的任何像素,以及与这些像素4向相连的任何像素(也使用与起始像素),依此类推