【剑斩OFFER】算法的暴力美学——LeetCode 733 题:图像渲染

一、题目描述

二、算法原理

思路:层序遍历(BFS)解决 FloodFill 题

假设从(2,2)开始,我们先把(2,2)入队列,在把 image【 2】【2】 = color ,然后遍历他的上下左右的值是否和他一样 = 1,所以我们把(2,2)入队列之前先保存他对应的值,如果上下左右有值和他一样,那么入队列,直到队列为空;

三、代码实现

cpp 复制代码
class Solution {
    typedef pair<int,int> PII;
    //上下左右的移动值
    int dy[4] = {0,0,-1,1};
    int dx[4] = {-1,1,0,0};
public:
    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
        int target = image[sr][sc];//保持原始值
        if(target == color) return image;

        int wight = image[0].size();//宽
        int high = image.size();//高

        queue<PII> que;
        que.push({sr,sc});//使用层序遍历
        image[sr][sc] = color;
        while(que.size())//队列不为空继续查找
        {
            auto [x,y] = que.front();
            que.pop();
            for(int i = 0; i < 4; i++)//上下左右查找符合题目要求的值
            {
                int a = x + dy[i];
                int b = y + dx[i];
                if(a >= 0 && a < high && b >= 0 && b < wight && image[a][b] == target)//符合题目要求
                {
                    image[a][b] = color;
                    que.push({a,b});
                }
            }
        }
        return image;
    }
};
相关推荐
AI软著研究员1 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱2 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者18 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮19 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者19 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考19 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法