热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【leetcode】827.MakingALargeIsland

题目如下:解题思路:这个题目可以进行拆分成几个子问题。第一,求出island的数量,其实就是 200.NumberofIslands,这个很简单,DFS或者BFS都能搞定;第二,除

题目如下:

【leetcode】827. Making A Large Island

解题思路:这个题目可以进行拆分成几个子问题。第一,求出island的数量,其实就是 200. Number of Islands,这个很简单,DFS或者BFS都能搞定;第二,除了求出island的数量之外,还要求出每个island包括的1的数量,这个也不难,在DFS或者BFS的过程中计数即可;第三,遍历grid中所有的0,判断每个0的上下左右分别连接了几个不同的island,并将连接的所有island的所有1的数量求和,再加上本身的1(0变来的)即是这个0变成1可以得到的large island,最后,求出所有0的最大的large island即可。

代码如下:

class Solution(object):
    def largestIsland(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        for i in grid:
            i.append('#')
            i.insert(0,'#')
        grid.append(['#' for i in grid[0]])
        grid.insert(0,['#' for i in grid[0]])
        visit = []
        for i in grid:
            visit.append([0 for x in i])
        queue = []

        l = [0]

        area = 1
        num = 1

        for i in xrange(1,len(grid)):
            for j in xrange(1,len(grid[i])):
                if grid[i][j] == '#' or grid[i][j] == 0:
                    continue
                if visit[i][j] != 0:
                    continue
                queue.append((i,j,area))
                visit[i][j] = area
                while len(queue) > 0:
                    x,y,a = queue.pop(0) # a为island的编号,用来记录一个有几个island
                    if grid[x+1][y] == 1 and visit[x+1][y] == 0:
                        num += 1
                        queue.append((x+1,y,a))
                        visit[x + 1][y] = a
                    if grid[x-1][y] == 1 and visit[x-1][y] == 0:
                        num += 1
                        queue.append((x-1,y,a))
                        visit[x - 1][y] = a
                    if grid[x][y+1] == 1 and visit[x][y+1] == 0:
                        num += 1
                        queue.append((x,y+1,a))
                        visit[x][y + 1] = a
                    if grid[x][y-1] == 1 and visit[x][y-1] == 0:
                        num += 1
                        queue.append((x,y-1,a))
                        visit[x][y - 1] = a
                area += 1
                l.append(num) #l为每个island的1的数量
                num = 1
        res = 0
        for i in l:
            if res < i:
                res = i
        #print visit,l
        for i in xrange(1,len(grid)):
            for j in xrange(1,len(grid[i])):
                if grid[i][j] == 0:
                    count = 1
                    al = []
                    if grid[i+1][j] == 1:
                        if visit[i+1][j] not in al:
                            count += l[visit[i+1][j]]
                            al.append(visit[i+1][j])
                    if grid[i-1][j] == 1:
                        if visit[i-1][j] not in al:
                            count += l[visit[i-1][j]]
                            al.append(visit[i-1][j])
                    if grid[i][j+1] == 1:
                        if visit[i][j+1] not in al:
                            count += l[visit[i][j+1]]
                            al.append(visit[i][j+1])
                    if grid[i][j-1] == 1:
                        if visit[i][j-1] not in al:
                            count += l[visit[i][j-1]]
                            al.append(visit[i][j-1])
                    if res < count:
                        res = count
        return res

 


推荐阅读
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文详细介绍了如何在Unity中实现一个简单的广告牌着色器,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
author-avatar
cjaklxn_490
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有