首页 > 其他分享 >大厂面试高频题目——图论

大厂面试高频题目——图论

时间:2024-06-12 21:36:04浏览次数:22  
标签:图论 res self len next grid 大厂 visited 高频

797.所有可能的路径

给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)
graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

思考

深搜dfs模板题。

class Solution:
    def __init__(self):
        self.path = []
        self.res = []
    def dfs(self,graph,x):
        if self.path[-1] == len(graph)-1:
            self.res.append(self.path[:])
            return
        for i in graph[x]:
            self.path.append(i)
            self.dfs(graph,i)
            self.path.pop() 
    def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
        self.path.append(0)
        self.dfs(graph,0)
        return self.res

200. 岛屿数量

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

思考

按行列开始遍历,记录访问过的陆地节点,如果遇到新的没有访问过的陆地节点,岛屿计数器+1,同时基于这个陆地节点进行搜索(深搜或广搜都可以),把临近的陆地节点都标记成已访问。

  1. 深搜版本
class Solution:
    def dfs(self,grid,visited,i,j):
        dir = [[-1,0],[1,0],[0,-1],[0,1]]
        m = len(grid)
        n = len(grid[0])
        for dx,dy in dir:
            next_x,next_y = i+dx,j+dy
            if next_x<0 or next_x > m-1 or next_y<0 or next_y > n-1:
                continue
            #print(m,n,next_x,next_y)
            if grid[next_x][next_y] == '0' or visited[next_x][next_y]:
                continue
            visited[next_x][next_y] = True
            self.dfs(grid,visited,next_x,next_y)
    def numIslands(self, grid: List[List[str]]) -> int:
        m = len(grid)
        n = len(grid[0])
        visited = [[False] * n for _ in range(m)]
        res = 0
        for i in range(m):
            for j in range(n):
                if grid[i][j] =='1' and not visited[i][j]:
                    res+=1
                    visited[i][j] = True
                    self.dfs(grid,visited,i,j)
        return res

2.bfs版本

class Solution:
    def bfs(self,grid,visited,i,j):
        dir = [[-1,0],[1,0],[0,-1],[0,1]]
        m = len(grid)
        n = len(grid[0])
        queue = deque()
        queue.append((i,j))
        while queue:
            i,j = queue.popleft()
            for dx,dy in dir:
                next_x,next_y = i+dx,j+dy
                if next_x<0 or next_x > m-1 or next_y<0 or next_y > n-1:
                    continue
                #print(m,n,next_x,next_y)
                if grid[next_x][next_y] == '0' or visited[next_x][next_y]:
                    continue
                visited[next_x][next_y] = True
                queue.append((next_x,next_y))
    def numIslands(self, grid: List[List[str]]) -> int:
        m = len(grid)
        n = len(grid[0])
        visited = [[False] * n for _ in range(m)]
        res = 0
        for i in range(m):
            for j in range(n):
                if grid[i][j] =='1' and not visited[i][j]:
                    res+=1
                    visited[i][j] = True
                    self.bfs(grid,visited,i,j)
        return res

标签:图论,res,self,len,next,grid,大厂,visited,高频
From: https://www.cnblogs.com/forrestr/p/18244710

相关文章

  • 大厂面试高频题——动态规划
    子串、子序列300.最长递增子序列给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。classSolution:deflengthOfLIS(self,nums......
  • 大厂“争招”鸿蒙人才,鸿蒙程序员平均月薪超1万8
    鸿蒙程序员成新宠,大厂“抢人”大战白热化,月薪破万八只是开始?   在科技浪潮的推动下,鸿蒙系统异军突起,成为科技圈的新星。它如同一块肥沃的土地,孕育着无限商机,也滋养着程序员的梦想。如今,鸿蒙程序员已成为市场上的“香饽饽”,一场前所未有的“抢人”大战正在上演。而这一切,都......
  • 53道Java基础高频题整理(附答案背诵版)
    Java为什么被称为平台无关性语言?Java被称为平台无关性语言,是因为一旦Java代码被编译成字节码,这些字节码就可以在任何安装了Java虚拟机(JVM)的设备上运行,无论这个设备使用的是什么操作系统。这就是“一次编写,到处运行”的理念。Java的这种平台无关性主要得益于Java虚拟机(JVM)......
  • 85道Spring高频题整理(附答案背诵版)
    请阐述Spring框架的基本概念。?Spring框架是一个开源的企业级应用开发框架,由RodJohnson创建,并于2003年首次发布。Spring是在全方位提供企业级服务的基础上,用Java实现的。Spring的核心思想是使现代Java开发更加简单。Spring框架以其灵活性和透明性闻名,几乎可以用在任何Ja......
  • 面试专区|【39道Vi Vim高频题整理(附答案背诵版)】
    1.请简单描述VI编辑器的使用?VI编辑器是一种模式化的文本编辑器,广泛用于Unix和类Unix操作系统。它最初由BillJoy在1976年为BSDUnix编写。VI的特点是它分为三种主要模式:命令模式、插入模式和末行模式。命令模式:这是VI打开文件后默认进入的模式。在此模式下,您可以使用键盘......
  • 面试专区|【40道Bash Shell高频题整理(附答案背诵版)】
    1.简述如何调试Shell脚本?调试Shell脚本是一个帮助开发者识别和修正脚本中错误的过程。Bash提供了多种方式来调试脚本,其中包括:使用-x选项:通过在运行脚本时使用-x选项,Bash会在执行每一行命令之前打印该命令。这有助于查看脚本的执行流程和变量的值变化。例如,如......
  • 首届IEEE RAS峰会,为什么大厂阿里、字节、腾讯都参加了?
    "RASinDataCenters2024"首届IEEERAS(Reliability,Availability,andServiceability,即可靠性、可用性和可维护性)在数据中心峰会在2024年6月11日至12日举行,地点设在美国加利福尼亚州圣克拉拉市的圣克拉拉万豪酒店(SantaClaraMarriott)。这一峰会主要是为了探讨和交流数据......
  • 互联网大厂的缓存策略:抵抗超高并发的秘密武器
    大家好,我是冰河~~最近,有小伙伴私信我:冰哥,我最近出去面试,面试官问我如何设计缓存能让系统在百万级别流量下仍能平稳运行,我当时没回答上来。接着,面试官问我之前的项目是怎么使用缓存的,我说只是缓存了一些数据。当时确实想不到缓存还有哪些用处,估计这次面试是挂了。冰哥,你可以给我讲......
  • 突发!凌晨4点某制造业大厂国产数据库集群故障...
    ......
  • 面试高频问题----6
    一、String、StringBuffer、StringBuilder1.String:***string类是java中用于表示不可变字符序列的类。***string对象是不可变的,一旦创建,其值就不能被改变。每次对string对象的修改操作都会生成一个新的string对象。***由于string的不可变性,在频繁修改字符串情况,可能会产生大......