733. Flood Fill图像渲染和python 的队列学习

本文介绍了LeetCode中的Flood Fill问题,通过广度优先搜索(BFS)策略解决图像渲染填充。同时,深入探讨了Python中的deque数据结构,详细解释了deque在实现线程安全和高效插入、删除操作上的优势,以及相关的方法如append、appendleft、extend等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

题目搬运者

https://leetcode-cn.com/problems/flood-fill/
一幅图像用m × n的整数网格图像表示,其中image[i][j]表示图像的像素值。
你也被给予三个整数sr, sc和newColor。你应该从像素image[sr][sc]开始对图像进行填充。
为了执行泛洪填充,考虑起始像素,加上任意4方向上连接到与起始像素相同颜色的起始像素的像素,再加上任意4方向上连接到这些像素(同样具有相同的颜色)的像素,以此类推。用newColor替换上述所有像素的颜色

思路 广度优先算法

  1. 首先要有四个维度的方向坐标 [(x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)]
  2. 要有一个依次入队的队列
  3. 先push入原坐标,在push原坐标周围相同像素的四个点,并给坐标像素上色
  4. 在依次从queue中pop出队头坐标,在坐标周围相同像素的四个点进行判断和push操作,给坐标像素上色
class Solution(object):
    def floodFill(self, image, sr, sc, newColor):
        """
        :type image: List[List[int]]
        :type sr: int
        :type sc: int
        :type newColor: int
        :rtype: List[List[int]]
        """
        oldColor = image[sr][sc]
        if oldColor == newColor: return image
        n = len(image)
        m = len(image[0])
        que = collections.deque([(sr, sc)])
        image[sr][sc] = newColor
        while que:
            x, y = que.popleft()
            for mx, my in [(x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)]:
                if 0 <= mx < n and 0 <= my < m and image[mx][my] == oldColor:
                    que.append((mx, my))
                    image[mx][my] = newColor
        return image
        

关于python队列的学习

https://blog.youkuaiyun.com/chl183/article/details/106958004

collections模块 ==> Python标准库,数据结构常用的模块;collections包含了一些特殊的容器,针对Python内置的容器,例如list、dict、set和tuple,提供了另一种选择。

deque()

deque是栈和队列的一种广义实现,deque是"double-end queue"的简称;deque支持线程安全、有效内存地以近似O(1)的性能在deque的两端插入和删除元素,尽管list也支持相似的操作,但是它主要在固定长度操作上的优化,从而在pop(0)和insert(0,v)(会改变数据的位置和大小)上有O(n)的时间复杂度。

deque()

  • append()
  • appendleft()
  • extend()
  • extendleft()
  • pop()
  • popleft()
  • count()
  • insert(index,obj)
  • rotate(n)
  • clear()
  • remove()
  • maxlen()
#双边队列
dq = deque(['a','b'])

#增加数据到队尾
dq.append('c')
#增加数据到队左
dq.appendleft('d')
# 从右端逐个添加可迭代对象(与list同)
ex = (1, "h", 3)
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dlist1 = extend(ex)
# deque([0, 1, 2, 3, 1, 'h', 3])
dst.extendleft(ex)
# deque([3, 'h', 1, 'a', 'b', 'c', 'd'])


#输出队列所有数据
print(dq)
#移除队尾,并返回
print(dq.pop())
#移除队左,并返回
print(dq.popleft())#输出:deque(['d', 'a', 'b', 'c'])cd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值