695. 岛屿的最大面积(中等)

news2024/9/23 3:24:40

695. 岛屿的最大面积

  • 1. 题目描述
  • 2.详细题解
  • 3.代码实现
    • 3.1 Python
    • 3.2 Java

1. 题目描述

题目中转:695. 岛屿的最大面积

在这里插入图片描述
在这里插入图片描述

2.详细题解

    该题是典型的深度优先搜索题,深度优先搜索的基本思想是:从某个节点出发,尽可能深地搜索图的分支,直到达到叶子节点或图中所有可达的节点都被访问过。当节点v的所在边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这个过程一直进行到已发现从源节点可达的所有节点为止。
  深度优先搜索可以通过递归或栈(非递归)两种方式来实现。在刷题或者竞赛过程中,为节约时间,建议使用递归方式,但在实际工程应用中,一般使用栈的方式实现,使用栈更易理解,且更不易出现递归栈满的情况。
  具体算法如下:

  • Step1:初始化:矩阵的行数和列数 m , n m,n m,n,最大岛屿面积 a r e a area area,为便于遍历上下左右四个方向定义的数组;
  • Step2:双重循环依次遍历矩阵中的每一个元素: 行列索引分别为 i , j 行列索引分别为i,j 行列索引分别为i,j
  • Step3:如果元素值为 1 1 1
  •    ( i , j ) (i,j) (i,j)处元素改为0,压入栈,初始岛屿面积为1;
  •   单层循环,循环条件为堆栈不为空;依次判断上下左右四个位置的元素,值为 1 1 1的将索引压入栈,岛屿面积增加1;
  • Step4:保留最大岛屿面积;
  • Step5:返回岛屿面积。

3.代码实现

3.1 Python

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        directions = [0, 1, 0, -1, 0]
        m, n = len(grid), len(grid[0])
        area = 0
        for i in range(0, m):
            for j in range(0, n):
                if grid[i][j] == 1:
                    cur_area = 1
                    grid[i][j] = 0
                    stack = [(i, j)]
                    while len(stack) > 0:
                        r, c = stack.pop()
                        for k in range(4):
                            x = r + directions[k]
                            y = c + directions[k+1]
                            if 0 <= x < m and 0 <= y < n and grid[x][y] == 1:
                                cur_area += 1
                                grid[x][y] = 0
                                stack.append((x, y))
                    area = max(area, cur_area)
        return area

在这里插入图片描述

3.2 Java

class Solution {
    public int maxAreaOfIsland(int[][] grid) {
        int area = 0;
        int m = grid.length;
        int n = grid[0].length;
        int[] directions = {0, 1, 0, -1, 0};
        for (int i=0; i<m; i++){
            for (int j=0; j<n; j++){
                if (grid[i][j] == 1){
                    int curArea = 1;
                    grid[i][j] = 0;
                    Stack<int[]> stack = new Stack<>();
                    stack.push(new int[]{i, j});
                    while (!stack.isEmpty()){
                        int[] curr = stack.pop();
                        int r = curr[0];
                        int c = curr[1];
                        for (int k=0; k < 4; k++){
                            int x = r + directions[k];
                            int y = c + directions[k+1];
                            if (x >=0 && x < m && y >=0 && y<n && grid[x][y] == 1){
                                ++curArea;
                                grid[x][y] = 0;
                                stack.push(new int[]{x, y});
                            }
                        }
                    }
                    area = Math.max(area, curArea);
                }
            }
        }
        return area;
    }
}

在这里插入图片描述

  执行用时不必过于纠结,对比可以发现,对于python和java完全相同的编写,java的时间一般是优于python的;至于编写的代码的执行用时击败多少对手,执行用时和网络环境、当前提交代码人数等均有关系,可以尝试完全相同的代码多次执行用时也不是完全相同,只要确保自己代码的算法时间复杂度满足相应要求即可,也可以通过点击分布图查看其它coder的code。

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

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

相关文章

Redis未授权访问漏洞利用合集

一、基本信息 靶机&#xff1a;IP:192.168.100.40 攻击机&#xff1a;IP:192.168.100.60 二、漏洞 & 过程 Redis 未授权访问漏洞利用无口令远程登录靶机 靶机 cd redis-4.0.8/src./redis-server ../redis.conf 攻击机 ./redis-cli -h 192.168.100.40 Redis 未授权访问…

删除微博博文js脚本实现

我当前的时间&#xff1a;2024.8.18 脚本可以直接使用&#xff0c;随着时间推移&#xff0c;微博页面元素可能会有变动。 思路&#xff1a;javascript 模拟手动点击&#xff0c;下滑&#xff0c;并且删除博文 首先登录微博&#xff0c;进入自己的博文界面如下&#xff1a; 进…

数据结构08--排序及查找

1.基本概念 排序是处理数据的一种最常见的操作&#xff0c;所谓排序就是将数据按某字段规律排列&#xff0c;所谓的字段就是数据节点的其中一个属性。比如一个班级的学生&#xff0c;其字段就有学号、姓名、班级、分数等等&#xff0c;我们既可以针对学号排序&#xff0c;也可以…

c++ opencv开发环境搭建

打开opencv官网&#xff0c;OpenCV - Open Computer Vision Library 然后点击之后&#xff0c;下载即可&#xff0c;下载完成之后&#xff0c;点击安装&#xff0c;等待安装完毕。 这是安装完毕之后的目录&#xff0c;已经包含了头文件与lib库、dll等&#xff0c;开发之前的环境…

RK3568平台(触摸篇)主板端集成厂家触摸屏

一.硬件连接 板卡配触摸框架构如下图&#xff1a; 二.数据流向 板卡配触摸框的数据流向&#xff0c;尽量做到高灵活性&#xff0c;并且简单清晰&#xff1a; 1&#xff09;后台进程从触摸框获取原始数据并计算&#xff0c;计算的点报给 android 内核 input 系统&#xff0c…

【AI/算法类】OPPO 2025届秋招笔试题(B卷)

目录 1. 第一题2. 第二题3. 第三题 ⏰ 时间&#xff1a;2024/08/10 &#x1f504; 输入输出&#xff1a;ACM格式 ⏳ 时长&#xff1a;2h 本试卷还有选择题部分&#xff0c;但这部分比较简单就不再展示。 1. 第一题 小O有一个正整数 x x x&#xff0c;他想知道&#xff0c;第…

【机器学习】(基础篇五) —— 逻辑回归

逻辑回归 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广义线性模型&#xff0c;主要用于处理因变量为二分类或多分类&#xff08;通过独热编码或多输出逻辑回归&#xff09;的问题。尽管名字中带有“回归”二字&#xff0c;但实际上逻辑回归是一种分类算法&am…

SQLite数据库的增删改查(CRUD)

文章目录 SQLite数据库的增删改查&#xff08;CRUD&#xff09;添加数据更新数据删除数据查询数据使用SQL操作数据库添加数据的方法如下&#xff1a;更新数据的方法如下&#xff1a;删除数据的方法如下&#xff1a;查询数据的方法如下&#xff1a; SQLite数据库的增删改查&…

web技术1——jdk目录结构(重要),tomcat服务器(重要)

jdk文件夹结构(重要) bin目录&#xff1a; 里面都是.exe可执行文件。java&#xff0c;javac&#xff0c;javadoc&#xff0c;java编译工具&#xff0c;java监测工具等.exe文件都在这里。 include目录: 底层有用c写的东西&#xff0c;这里面包含很多c语言的文件&#xff0c…

Qt传入参数到mysql语句

试过两种方法都成功了 方法1&#xff1a;使用bool QSqlQuery::prepare和void QSqlQuery::bindValue传入参数,然后再使用bool QSqlQuery::exec() 执行Mysql语句 QSqlDatabase db //数据库 QSqlQuery result(db); // 基于已连接的数据库db建立 QSqlQuery 对象 QString strTime…

Linux du命令估算文件空间使用情况

du命令&#xff0c;估算文件空间使用情况&#xff0c;命令格式&#xff1a; du [option]... [file]... option&#xff1a; -a, --all显示所有文件的计数&#xff0c;而不仅仅是目录-d, --max-depthN打印文件夹深度小于等于N的总空间-h, --human-readable以人性化可读格式打…

Kotlin学习-01创建kotlin学习环境

安装idea https://www.jetbrains.com/zh-cn/ 创建项目 选择kotlin 修改Main.kt fun main() {print("Hello World!") }运行

类与对象(中(1))

开头 上一期内容&#xff0c;我们初步学习了类与对象中的基础知识&#xff0c;了解了类的定义&#xff0c;实例化以及this指针等相关内容&#xff0c;不知各位是否有一定的收获。今天&#xff0c;我们将更进一步&#xff0c;对类与对象中的默认成员函数部分进行一个初步的了解…

【排序篇】实现快速排序的三种方法

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1 交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本1.2.2 挖坑法1.2.3 前后指针…

C++求职LinuxWebServer面试篇(项目介绍)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ Qt5.9专栏定期更新Qt的一些项目Demo 项目与…

【数学建模】趣味数模问题——棋子颜色问题

问题描述&#xff1a; 在任意拿出黑白两种颜色的棋子共 n 个&#xff0c;随机排成一个圆圈。然后根据以下规则放置棋子&#xff1a; 在两颗颜色相同的棋子中间放一颗黑色棋子在两颗颜色不同的棋子中间放一颗白色棋子 放完后撤掉原来所放的棋子&#xff0c;重复以上过程&…

仿某知识蝉在线学习副业项目知识付费系统小程序源码

一、仿知识蝉知识付费系统源码简介 知识付费系统&#xff0c;集合了图文、音频、视频、直播授课&#xff0c;专栏&#xff0c;品牌商城等主流功能和付费形式&#xff0c;并且包含多种多样的营销方案和互动模块&#xff0c;打造属于自己的知识付费系统。 安装步骤&#xff1a;…

聚星文社的工具使用0.2.9版本

聚星文社是一个在线写作社区&#xff0c;提供多种工具供用户使用。以下是聚星文社的工具使用说明&#xff1a; 聚星文社的工具https://docs.qq.com/doc/DRU1vcUZlanBKR2xy 写作工具&#xff1a;聚星文社提供了一个强大的在线写作工具&#xff0c;包括富文本编辑器、字数统计、拼…

计算机毕业设计选题推荐-民宿管理系统-酒店预定系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…