1992. Find All Groups of Farmland

2024-02-27 00:08
文章标签 find groups 1992 farmland

本文主要是介绍1992. Find All Groups of Farmland,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这道题给出了所有的1组成的形状是四边形,让给出每个农田/陆地 的左上角和右下角的坐标。

这道题目还是千篇一路的bfs来遍历每个点,最鸡贼的如何判断当前点是右下角的点。

1. 正下方和右侧的点都是森林、海洋

2. 当前点在边界。

if((newy == col -1 || land[newx][newy+1] == 0) && ((newx == row -1) || land[newx+1][newy] == 0))

这个鸡贼的地方不难理解。处理完这个就能进行其他的了。

代码如下:

class Solution {
public:
    vector<int> bfs(int i, int j,vector<vector<int>>& land)
    {
        vector<int> ret{i,j};
        queue<pair<int,int>> myqueue;
        vector<int> dircX{0,-1,0,0,1};
        vector<int> dircY{-1,0,0,1,0};
        int row = land.size();
        int col = land[0].size();
        
        
        myqueue.push({i,j});
        
        while(!myqueue.empty()){
            pair<int, int> cur = myqueue.front();
            myqueue.pop();
            int x = cur.first;
            int y = cur.second;
            
            for(int i =0;i<5;i++) {
                int newx = x + dircX[i];
                int newy = y + dircY[i];
                
                if(newx<0 || newx >= row || newy <0 || newy >= col)
                    continue;
                else if(land[newx][newy] == 1){
                    myqueue.push({newx, newy});
                    land[newx][newy] = -1;
                    // 这里是关键点,如何判断当前grid是最右边的点?
                    // 看图知道,最右下角的点满足以下情况:
                    // 1. 正下方的点和右侧的点是森林 land[newx][newy+1] == 0) && land[newx+1][newy] == 0
                    // 2. 或者该点在边沿。newy == col -1 (newx == row -1)
                    if((newy == col -1 || land[newx][newy+1] == 0) && ((newx == row -1) || land[newx+1][newy] == 0)) {
                        ret.push_back(newx);
                        ret.push_back(newy);
                    }
                }
            }
        }
        
        return ret;
        
    }
    
    vector<vector<int>> findFarmland(vector<vector<int>>& land) {
        int row = land.size();
        int col = land[0].size();
        vector<vector<int>> ret={};
        
        for(int i =0;i<row;i++)
        {
            for(int j=0;j<col;j++)
            {
                if(land[i][j] == 1) {
                    vector<int> tmp =  bfs(i, j, land);
                    ret.push_back(tmp);
                }
            }
        }
        return ret;
    }
};

这篇关于1992. Find All Groups of Farmland的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/750599

相关文章

【Linux系列】find命令使用与用法详解

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等常用开发工具系列:常用的开发工具,IDEA,M

Leetcode 3195. Find the Minimum Area to Cover All Ones I

Leetcode 3195. Find the Minimum Area to Cover All Ones I 1. 解题思路2. 代码实现 题目链接:3195. Find the Minimum Area to Cover All Ones I 1. 解题思路 这一题还是挺简单的,只要找到所有1所在的元素的上下左右4个边界,作为目标矩形的四个边即可。 2. 代码实现 给出python

「Debug R」报错unable to find an inherited method for function是如何产生的

在一个群里看到这样一条报错,截图如下: 报错信息 当然这种问题解决起来也很快,无非就是把报错信息复制出来放在搜索引擎上,只不过你要挑选合适的搜索引擎。 百度 谷歌 必应 解决方案就是用dplyr::select。 虽然报错解决了,但是我还想着要重复出这个报错。因为只有能重复出报错,才能证明你不是运气好才解

[leetcode] 515. Find Largest Value in Each Tree Row

Find Largest Value in Each Tree Row 描述 You need to find the largest value in each row of a binary tree. Example: Input: 1/ \3 2/ \ \ 5 3 9 Output: [1, 3, 9] 我的代码 简单的dfs。 要使

【Rust日报】2022-2-11 Rustenstein 3D:像 1992 年一样的游戏编程

Rustenstein 3D:像 1992 年一样的游戏编程 随着 NextRoll 越来越多地采用 Rust 编程语言,工程师通常将 Hack Week 用作获得实践经验的机会。另一个流行的选择是开发视频游戏,正如您可能已经猜到的那样,我们经常看到它们在 Rust 视频游戏项目中结合使用。去年,一群人致力于扩展 rpg-cli 游戏。不过,这一次,他们想通过一个可以发挥 Rust 一些优势的项

cmake find_package 原理简介以及使用说明

下面简单介绍Cmake 如何使用find_package命令对外部库进行查找: cmake本身不提供任何关于搜索库的便捷方法,也不会对库本身的环境变量进行设置。它仅仅是按照优先级顺序在指定的搜索路径进行查找Findxxx.cmake文件和xxxConfig.cmake文件(其中xxx代表库的名字,特别注意的是有大小写之分),这两个文件大体上是没有区别的,cmake能够找到这两个文件中的任何一个,

Webstorm vue项目@路径不能跳转到对应资源,提示Cannot find declaration to go to

Webstorm vue项目@路径不能跳转到对应资源,提示Cannot find declaration to go to 我们 ctrl加鼠标左键点击方法会失效,看了网上很多教程在说需要在此处配置一下webpack.config.js的文件路径,而且指向了node_modules\@vue\cli-service\webpack.config.js 我试了好多次,不行,不论对错,这里

515. Find Largest Value in Each Tree Row 在每个树行中找最大值

https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/description/ 思路: 和637. Average of Levels in Binary Tree(https://www.jianshu.com/p/814d871c5f6d)的思路基本相同.即层遍历二叉树,然后在每层中分别找最大的. vec

442. Find All Duplicates in an Array 找数组中重复的数

https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/description/ 题意:找出数组中所有重复的元素 思路1:先将数组排序,然后判断是否重复,即若nums[i] != nums[i+1],即说明nums[i]非重复元素,可以删去. 重点在于指针(迭代器)的操作,由于vector的erase(删除)操作需要通

484. Find Permutation

https://leetcode.com/problems/find-permutation/description/ 题目大意:给一串DDII…D代表下降趋势,I代表上升.根据这一串DDII的序列构建出一个整数vector,且若有多个vector符合要求,返回字典序最小的. 解题思路:根据讨论的思路,首先构建出完全增序(IIII….)的序列1,2,3,4,…n,然后找序列中所有的D,将对应位