leetcode1020. 飞地的数量

news2024/11/26 18:36:52
  • https://leetcode.cn/classic/problems/number-of-enclaves/description/

  • 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。

  • 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。

  • 返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量

在这里插入图片描述

CODE

  • 从外向内
class Solution {
public:
    int numEnclaves(vector<vector<int>>& grid) {
        int res = 0;
        int m = grid.size();
        int n = grid[0].size();

        vector<vector<bool>> visit(m,vector<bool>(n,false));

        for(int i=0;i<m;i++){

                dfs(i,0,m,n,grid,visit);

                dfs(i,n-1,m,n,grid,visit);

        }
        for(int i=0;i<n;i++){

                dfs(0,i,m,n,grid,visit);

                dfs(m-1,i,m,n,grid,visit);
        }

        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j] ==1)
                    if(!visit[i][j]){
                        res++;
                    }
            }
        }
        return res;

    }

    bool dfs(int i,int j,int m,int n,vector<vector<int>>& grid,vector<vector<bool>>& visit){
        if(i<0 || i>= m) return true;
        if(j<0 || j>= n) return true;
        if(grid[i][j] == 0){return false;}
        if(visit[i][j]) return true;
        visit[i][j] = true ;
        bool up=false,down=false,left=false,right=false;
        {  up  = dfs(i-1,j,m,n,grid,visit);}
        {  down  = dfs(i+1,j,m,n,grid,visit);}
        {  left  = dfs(i,j-1,m,n,grid,visit);}
        {  right  = dfs(i,j+1,m,n,grid,visit);}

        if(up || down || left || right ){
            return true;
        }
        return false;

    }
};

CG

  • leetcode200. 岛屿数量

  • 错误示例

class Solution {
public:
    int numEnclaves(vector<vector<int>>& grid) {
        int res = 0;
        int m = grid.size();
        int n = grid[0].size();

        vector<vector<bool>> visit(m,vector<bool>(n,false));

        for(int i=0;i<m;i++){
            if(grid[i][0] ==1)
                dfs(i,0,m,n,grid,visit);
            if(grid[i][n-1] ==1)
                dfs(i,n-1,m,n,grid,visit);

        }
        for(int i=0;i<n;i++){
            if(grid[0][i] ==1)
                dfs(0,i,m,n,grid,visit);
            if(grid[n-1][i] ==1)
                dfs(m-1,i,m,n,grid,visit);
        }

        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j] ==1)
                    if(!visit[i][j]){
                        res++;
                    }
            }
        }
        return res;

    }

    bool dfs(int i,int j,int m,int n,vector<vector<int>>& grid,vector<vector<bool>>& visit){
        if(i<0 || i>= m) return true;
        if(j<0 || j>= n) return true;
        if(grid[i][j] == 0){return false;}
        if(visit[i][j]) return true;
        visit[i][j] = true ;
        bool up=false,down=false,left=false,right=false;
        {  up  = dfs(i-1,j,m,n,grid,visit);}
        {  down  = dfs(i+1,j,m,n,grid,visit);}
        {  left  = dfs(i,j-1,m,n,grid,visit);}
        {  right  = dfs(i,j+1,m,n,grid,visit);}

        if(up || down || left || right ){
            return true;
        }
        return false;

    }
};
  • 超时(从内向外且没有记忆化搜索)
#include <stdio.h>
#include<vector>
#include<memory>
#include<iostream>
using namespace std;
class Solution {
public:
    int numEnclaves(vector<vector<int>>& grid) {
        int res = 0;
        int m = grid.size();
        int n = grid[0].size();

        vector<vector<bool>> visit(n,vector<bool>(m));
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j] ==1)
                    if(dfs(i,j,m,n,grid,visit)){
                        res++;
                    }
            }
        }
        return res;

    }

    bool dfs(int i,int j,int m,int n,vector<vector<int>>& grid,vector<vector<bool>>& visit){
        if(i<0 || i>= m) return true;
        if(j<0 || j>= n) return true;
        if(grid[i][j] == 0){return false;}
        visit[i][j] = true ;
        bool up,down,left,right;
        if(i-1>=0)
        if(not visit[i-1][j]){  up  = dfs(i-1,j,m,n,grid,visit);}
        if(i+1<m)
        if(not visit[i+1][j]){  down  = dfs(i+1,j,m,n,grid,visit);}
        if(j-1>=0)
        if(not visit[i][j-1]){  left  = dfs(i,j-1,m,n,grid,visit);}
        if(j+1<n)
        if(not visit[i][j+1]){  right  = dfs(i,j+1,m,n,grid,visit);}
        visit[i][j] = false ;
        if(up || down || left || right ){
            return true;
        }
        return false;

    }
};


int main()
{
    printf("---<");
    unique_ptr<Solution> mysolo = unique_ptr<Solution>(new Solution());
    vector<vector<int>> gird = {{0,0,0,0},{1,0,1,0},{0,1,1,0},{0,0,0,0}};
    int res = mysolo->numEnclaves(gird);
    cout<< res<< endl;
    return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哈希的应用->位图

ps&#xff1a;左移位并不是向左移动位&#xff0c;而是低数据位向高数据位挪动 位图&#xff08;主要接口&#xff0c;set(size_t)标识、reset(size_t)取消、test(size_t) 查看 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一…

做软件测试到底要不要学编程?

乔布斯曾经说过“每个人都应该学习编程&#xff0c;因为它会教你如何思考”&#xff0c;看&#xff0c;乔帮主都觉得所有人都应该学编程&#xff0c;那你说做测试的要不要学&#xff1f;当然要。 作为测试人员&#xff0c;除了上面这个原因&#xff0c;我觉得如果会编程&#x…

Android架构之MVC,MVP,MVVM解析

MVC架构 View&#xff1a;Acitivity(View)、Fragment(View)视图&#xff0c;在android里xml布局转成View后&#xff0c;加载到了Activity/Fragment里了。 Controller&#xff1a;Controller对应着Activity/Fragment&#xff0c;绑定UI&#xff0c;处理各种业务。 Model&#xf…

python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)

简介 上一篇&#xff0c;我们虽然已经将生成的最新的测试报告发出去了&#xff0c;但是MIMEText 只能发送正文&#xff0c;无法带附件&#xff0c;因此我还需要继续改造我们的代码&#xff0c;实现可以发送带有附件的邮件。发送带附件的需要导入另外一个模块 MIMEMultipart。还…

java版电子招标采购系统源码之电子招标采购实践与展望-招标采购管理系统

统一供应商门户 便捷动态、呈现丰富 供应商门户具备内外协同的能力&#xff0c;为外部供应商集中推送展示与其相关的所有采购业务信息&#xff08;历史合作、考察整改&#xff0c;绩效评价等&#xff09;&#xff0c;支持供应商信息的自助维护&#xff0c;实时风险自动提示。…

springboot+MySQL实现4S店车辆管理系统

本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库&#xff0c;而java技术&#xff0c;B/S架构则保证了较高的平台适应性。本文主要介绍了本系统的开发背景&#xff0c;所要完成的功能和开发的过程&#xff0c;主要说明了系统设计的重点、设计思想。

计算机体系结构基础知识介绍之使用多问题和静态调度来利用 流水线

为了提高处理器的性能&#xff0c;我们需要让每个时钟周期内发出多条指令&#xff0c;而不是只发出一条。这种多发射处理器有三种主要类型&#xff1a; 1. 静态调度的超标量处理器 2. VLIW&#xff08;非常长指令字&#xff09;处理器 3. 动态调度的超标量处理器。 这三种类型的…

lua 请求ftp服务器数据,下载文件

1、装入ftp库 2、调用ftp的get()方法 3、get()方法参数格式&#xff1a; 4、将返回到的数据写入文件中 例如&#xff0c;本次获取专利数据系统 http://patdata1.cnipa.gov.cn/ 的ftp站点数据 local ftp require("socket.ftp")--此处我没填端口号 file,err ftp.g…

findfont: Font family ‘Times New Roman‘ not found.

问题 Linux 使用 matplotlib.pyplot 画图时为了使字体和英文论文中的 Times of Roman 一致&#xff0c;通常会用到如下文本格式 font1 {family: Times New Roman, # x and y labelsweight: normal,size: 16}但在实际使用时会出现如下报警信息&#xff1a; findfont: Font …

element ui 导入模块的封装

导入组件的封装 <template><Modal :visible"visible" title"导入" onSave"onSave" onCancal"closeDialog"><template #default><el-upload ref"upload" class"upload-demo"action"ht…

Scala中使用 break 和 continue

Scala中没有 break 和 continue 关键字&#xff0c;但是我们可以用 Breaks 类提供的相应方法来实现对应功能。 在Java中&#xff0c;break continue return的区别 1、break&#xff1a;break不仅可以结束其所在的循环&#xff0c;还可结束其外层循环&#xff0c;但一次只能结束…

Vulnhub: Hackable:II靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.142 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.142 网站的files目录 ftp存在匿名登录&#xff0c;所在目录为网站的files目录 ftp上传反弹shell 提权 目标根目录下的.ru…

预付费智能水表远程控制系统

预付费智能水表远程控制系统是一种基于物联网技术的智能水表管理系统&#xff0c;它通过远程通信技术和云计算平台&#xff0c;实现了对水表的实时监控、数据采集、费用计算、远程控制等功能。该系统不仅可以提高水务公司的管理效率&#xff0c;还可以为用户提供更加便捷、可靠…

[疑难杂症2023-004]停止服务器自动启动的服务,解决端口占用的问题

本文由Markdown语法编辑器编辑完成。 1. 背景 前段时间&#xff0c;在linux上启动一个目录下的docker-compose.yml中的服务时&#xff0c;遇到了一个3000端口被占用的问题. 凭借经验&#xff0c;一般可能是之前的服务没被正常的停止掉&#xff0c;导致该服务占用的端口未被释…

阿里云——网站建设:动态网站建设(知识点)

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 写在前面 课程目标 一.简单搭建动态网站 1.网站搭建类型 &#xff08;1&#xff0…

eclipse4.2.1 juno install SWT 1.7

SWT-windowbuilder-1.7-eclipse4.2.1-juno windows WB_v1.7.0_UpdateSite_for_Eclipse4.2.zip

【ESP32-CAM】20元就能搭建简易Web摄像头

图文步骤 在首选项中&#xff0c;增加网址https://dl.espressif.com/dl/package_esp32_index.json 安装esp32资源包 选择ESP32-CAM开发板 选一个USB-TTL的串口工具&#xff0c;按照图示&#xff0c;RX接U0TXD&#xff0c;TX接U0RXD&#xff0c;GND和5V供电&#xff0c;其中G…

3 2^k-分位数组

作者: 赵晓鹏时间限制: 1S章节: 递归与分治 #include <iostream> #include <algorithm> #include <queue> #include <tuple> #include <stack> #pragma GCC optimize(1) #pragma GCC optimize(2) #pragma GCC optimize(3,"Ofast",&quo…

【UGUI学习笔记】渲染层级

文章目录 Camera渲染Canvas渲染Sorting LayerOrder in Layer 图层渲染 Camera渲染 摄像机的渲染层级需要修改Clear Flags属性&#xff0c;这个属性下的四种模式比较复杂&#xff0c;此处只是介绍不同渲染方式下进行的选择。 摄像机的默认模式是Skybox&#xff0c;也就是视距内…

Acwing 850. Dijkstra求最短路 II

Acwing 850. Dijkstra求最短路 II 链接:850. Dijkstra求最短路 II - AcWing题库 /* 题解:堆优化版本的dijkstra 就是优化了 每次寻找当前距离源最近的点的时间 有小顶堆来维护当前为确定的点和源的距离 那么每次找最新确定的点的时候就是堆顶 */ #include<iostream> #i…