Leetcode刷题笔记1 图论part03

漫画:小白为了面试如何刷题?(呕心沥血算法指导篇) 今天是小浩算法“365刷题计划” - 刷题指导篇(小白篇)。三年高考,五年刷题。leetcode不算从其他各处收录的题目,单就自己的题库,总共有1600+,如果按照每天刷一道的话,总共... 阅读详情

卡码网 101 孤岛总面积

from collections import deque
directions = [[0, 1], [1, 0], [0, -1], [-1, 0]]
count = 0

def main():
    global count
    n, m = map(int, input().split())
    grid = []
    for _ in range(n):
        grid.append(list(map(int, input().split())))
    for i in range(n):
        if grid[i][0] == 1:
            dfs(grid, i, 0)
        if grid[i][m - 1] == 1:
            dfs(grid, i, m - 1)
    for j in range(m):
        if grid[0][j] == 1:
            dfs(grid, 0, j)
        if grid[n - 1][j] == 1:
            dfs(grid, n - 1, j)
    count = 0
    for i in range(n):
        for j in range(m):
            if grid[i][j] == 1:
                dfs(grid, i, j)
    print(count)

def dfs(grid, i, j):
    que = deque()
    global count
    que.append((i, j))
    grid[i][j] = 0
    count += 1
    while que:
        cur_x, cur_y = que.popleft()
        for x, y in directions:
            next_x, next_y = cur_x + x, cur_y + y
            if next_x < 0 or next_y < 0 or next_x >= len(grid) or next_y >= len(grid[0]):
                continue
            if grid[next_x][next_y] == 1:
                count += 1
                que.append((next_x, next_y))
                grid[next_x][next_y] = 0

if __name__ == '__main__':
    main()
    

卡码网 102 沉没孤岛

from collections import deque

n, m = list(map(int, input().split()))
g = []
for _ in range(n):
    row = list(map(int,input().split()))
    g.append(row)
    
directions = [(1,0),(-1,0),(0,1),(0,-1)]
count = 0

def bfs(r,c,mode):
    global count 
    q = deque()
    q.append((r,c))
    count += 1
    
    while q:
        r, c = q.popleft()
        if mode:
            g[r][c] = 2
            
        for di in directions:
            next_r = r + di[0]
            next_c = c + di[1]
            if next_c < 0 or next_c >= m or next_r < 0 or next_r >= n:
                continue
            if g[next_r][next_c] == 1:
                q.append((next_r,next_c))
                if mode:
                    g[r][c] = 2
                    
                count += 1
    

for i in range(n):
    if g[i][0] == 1: bfs(i,0,True)
    if g[i][m-1] == 1: bfs(i, m-1,True)
    
for j in range(m):
    if g[0][j] == 1: bfs(0,j,1)
    if g[n-1][j] == 1: bfs(n-1,j,1)

for i in range(n):
    for j in range(m):
        if g[i][j] == 2:
            g[i][j] = 1
        else:
            g[i][j] = 0
            
for row in g:
    print(" ".join(map(str, row)))

卡码网 103 水流问题

first = set()
second = set()
directions = [[0, 1], [1, 0], [0 ,-1], [-1, 0]]
def dfs(i, j, grid, visited, side):
    if visited[i][j]:
        return
    visited[i][j] = True
    side.add((i, j))
    for x, y in directions:
        new_x = i + x 
        new_y = j + y
        if (
            0 <= new_x < len(grid)
            and 0 <= new_y < len(grid[0])
            and int(grid[new_x][new_y]) >= int(grid[i][j])
        ):
            dfs(new_x, new_y, grid, visited, side)
    
def main():
    global first
    global second
    n, m = map(int, input().split())
    grid = []
    for _ in range(n):
        grid.append(list(map(int, input().strip().split())))
        
    visited = [[False] * m for _ in range(n)]
    for i in range(m):
        dfs(0, i, grid, visited, first)
    for i in range(n):
        dfs(i, 0, grid, visited, first)
    visited = [[False] * m for _ in range(n)]
    for i in range(m):
        dfs(n - 1, i, grid, visited, second)
    for i in range(n):
        dfs(i, m - 1, grid, visited, second)
    res = first & second
    for x, y in res:
        print(f"{x} {y}")
 
if __name__ == '__main__':
    main()

卡码网 104 建造最大岛屿

from typing import List 
from collections import defaultdict

class Solution():
    def __init__(self):
        self.direction = [[0, 1], [1, 0], [0, -1], [-1, 0]]
        self.res = 0
        self.count = 0
        self.idx = 1
        self.count_area = defaultdict(int)

    def max_area_island(self, grid: List[List[int]]) -> int:
        if not grid or len(grid) == 0 or len(grid[0]) == 0:
            return 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == 1:
                    self.count = 0
                    self.idx += 1
                    self.dfs(grid, i, j)
        self.check_area(grid)
        if self.check_largest_connnect_island(grid):
            return self.res + 1
        return max(self.count_area.values())
    
    def dfs(self, grid, x, y):
        grid[x][y] = self.idx
        self.count += 1
        for i, j in self.direction:
            next_x = x + i
            next_y = y + j
            if 0 <= next_x < len(grid) and 0 <= next_y < len(grid[0]) and grid[next_x][next_y] == 1:
                self.dfs(grid, next_x, next_y)
        return
    
    def check_area(self, grid):
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                self.count_area[grid[i][j]] = self.count_area.get(grid[i][j], 0) + 1
        return

    def check_largest_connnect_island(self, grid):
        m, n = len(grid), len(grid[0])
        has_connect = False
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 0:
                    has_connect = True
                    area = 0
                    visited = set()
                    for x, y in self.direction:
                        next_x = x + i
                        next_y = y + j
                        if 0 <= next_x < len(grid) and 0 <= next_y < len(grid[0]) and grid[next_x][next_y] != 0 and grid[next_x][next_y] not in visited:
                            visited.add(grid[next_x][next_y])
                            area += self.count_area[grid[next_x][next_y]]
                            self.res = max(self.res, area)
        return has_connect

def main():
    n, m = map(int, input().split())
    grid = []
    for _ in range(n):
        grid.append(list(map(int, input().strip().split())))
    sol = Solution()
    print(sol.max_area_island(grid))
if __name__ == '__main__':
    main()

STM32芯片解锁读写保护:更改Option Byte [Error已解决] 解锁读保护:STLink更改Option Byte 变Level从1变为0,点击Apply即可。(程序执行读保护,其实是将Level从0变为1) 默认情况下该保护功能是不开启的,若要开启该功能,需要改写内部FLASH选项字节(Option Bytes)中的配置。 RDP读保护级别 级别0,无保护, 级别1,使能读保护, 这种保护下,若使用调试功能(使用下载器、仿真器)或者从内部SRAM自举时都不能对内部FLASH及备份SRAM作任何访问(读写、擦除都被禁止); 当芯片处于级别1的时候,可以把选项字节 阅读详情

相关推荐

电子数据取证实战:从“平航杯”竞赛看计算机检材分析的关键技术与案例解析

本文通过'平航杯'电子数据取证竞赛案例,深入解析计算机检材分析的关键技术,包括USB设备追踪、浏览器历史分析、AI换脸取证、虚拟货币交易追踪等实战技巧。重点探讨了数字痕迹的发现与关联,以及电子取证工具链的应用,为从业人员提供实用的技术参考和案例分析。

www00的博客 536

Leetcode 刷题笔记1 回溯算法part03

本题的难点一是判断字符串是否有效,有很多小细节;二是对字符串串的切割。

pinglejun的博客 236

Anaconda详细安装及使用教程(带图文)

Anacond的介绍 Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。因为包含了大量的科学包,Anaconda的下载文件比较大(约531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和Python)。 Conda是一个开源的包、环境管理器,可以用于...

代码帮 186万+

leetcode刷题-part1

title: leetcode刷题-part1 date: 2018-09-21 17:32:47 updated: 2020-03-11 21:33:18 categories: 算法刷题 tags: - 算法刷题 - leetcode 此leetcode刷题系列记录单独做的leetcode题目与答案,并非每道题都做,只记录做过的。每篇文档25道题,以官网题目序号为顺序。 一、题目总览 ...

Pop_Rain的博客 343

C++实战指南:使用CodeBlocks构建跨平台wxWidgets窗口应用

本文是一份面向C++初学者的实战指南,详细介绍了如何使用CodeBlocks IDE和wxWidgets框架快速构建跨平台的桌面窗口应用。内容涵盖从环境搭建、项目配置到界面设计、事件处理的全流程,重点讲解了如何利用CodeBlocks的开箱即用支持和wxSmith可视化设计器,高效开发具有按钮、菜单、列表等控件的交互式窗口界面程序,帮助读者轻松入门GUI开发。

weixin_29012677的博客 154

ICC2 高效上手 | create_lib 命令全攻略:数字后端工程师的必备秘籍

如果技术文件中的足够满足你的需求,你可以设置,然后运行create_lib命令;如果技术文件的精度不够,那就需要显式地使用来定义缩放因子。在使用create_lib必须显式指定库名(如my_libA推荐优先通过或来关联技术数据,确保你的设计库有正确的工艺基础。显式地通过-ref_libs定义参考库,这样可以避免工具自动推导时可能出现的冲突。慎重使用,只有在对数据精度有特殊需求时才显式指定,并且要确保它与参考库的缩放因子一致。

weixin_50820814的博客 1595

leetcode刷题 (数据库 MySQL) Part 2

LEETCODE数据库题目刷题,一般题目都会整理(目前只有非会员的题目 ????),除了自己的题解还会整合大家的,不定期更新(暂时决定10道题左右一个文档,要不然太长了,最后看能刷多少题再看要不要整合吧)。 LEETCODE数据库题库链接:https://leetcode-cn.com/problemset/database/ 197.上升的温度 题目: 给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。 Id(INT) RecordD

weixin_44460564的博客 641

信创迁移实战:在银河麒麟V10-SP1上为Milvus离线部署Docker(附SP1专属避坑指南)

本文详细介绍了在银河麒麟V10-SP1 x86_64环境下离线部署Docker的全流程,特别针对该版本特有的自定义目录安装失败问题提供深度分析和解决方案。通过实战验证的步骤和避坑指南,帮助用户在信创项目中顺利完成Milvus等应用的容器化部署。

weixin_30687051的博客 532

Leetcode 刷题笔记1 动态规划part03

背包问题分为物品的重量和价值以及背包的最大承重,求得在背包最大承重范围内的最大价值。滚动数组:dp[j] = max(dp[j],dp[j - num] + num)今日的主要内容是背包问题(0 - 1背包问题)

pinglejun的博客 282

【Agent实战】Agent Skills 深度解析:从原理到落地的完整指南

本文深入解析了Agent Skills的概念及其在AI协作中的实际应用。Skill是一种可被AI按需发现和加载的任务执行说明书,它将团队经验、规则和步骤固化为结构化文档,如SKILL.md。文章阐明了Skill与Prompt、MCP、Function Calling的关系,强调Skill专注于"怎么做"而非底层能力。重点介绍了SKILL.md的编写规范,包括元数据命名规则、描述技巧和正文内容优化,旨在帮助开发者高效构建可复用的知识资产,提升Agent的任务执行稳定性与专业性。通过清晰的示例和对比,为AI架构

少说,多做 115

YOLOv13优化:PoolingFormerCGLU模块 MetaFormer 框架 + 池化混合器 手把手教你自注意力

PoolingFormer1 是一个基于 MetaFormer 框架 的轻量化卷积-Transformer 混合模块,通过 Pooling 取代自注意力,实现: 更低的计算成本 一定的全局信息融合 兼容 CNN 和 Transformer 的优点

FJN110的博客 425

Leetcode 刷题笔记1 贪心算法part03

leetcode 134 加油站。

pinglejun的博客 361

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

总结WRF运行时报错及解决方案(持续更新)

WW、forever的博客 1630

Python | Leetcode刷题日寄Part05

Python|Leetcode刷题日寄Part05: 💦:二叉树的中序遍历;🔥:对称二叉树;🍞:翻转二叉树;💡:验证二叉搜索树;🚀:岛屿数量;🌲:二叉树的最小深度;🎁:二叉树展开为链表;🌞:二叉树的前序遍历;🌠:相同的树;💎:路径总和

四口鲸鱼爱吃盐的博客 803

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Leetcode 刷题笔记1 二叉树part03

本次学习以递归的应用,递归三要素:传入参数返回值、终止条件、循环逻辑。

pinglejun的博客 189

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Leetcode-2021.03记录-part2

文章目录三月刷题记录-part254. 螺旋矩阵59. 螺旋矩阵Ⅱ190.颠倒二进制位61.旋转链表方式一方式二82.删除排序链表中的重复元素456.132模式 三月刷题记录-part2 此博文为个人学习笔记,记录2021年3月Leetcode每日一题刷题记录 54. 螺旋矩阵 题目链接 描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 示例1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,

qq_38557583的博客 190

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

leetcode刷题day24|回溯算法Part03(93.复原IP地址、78.子集、90.子集II)

回溯,巩固分割问题,练习集合问题,分割问题还是有难度的。

m0_51007517的博客 1078

贪心算法part03算法

● 1005.K次取反后最大化的数组和● 134. 加油站● 135. 分发糖果。

Belle_Daisy的博客 841

求职刷题力扣DAY31---贪心算法part03

因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]你从其中的一个加油站出发,开始时油箱为空。

qq_44486787的博客 1047

【代码随想录Day51】图论Part03

【代码】【代码随想录Day51】图论Part03。

Shayne 的博客 752

求职刷题力扣 DAY37 动态规划 part03 0-1背包问题

给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。典型的0-1背包,只不过容量和价值相同,target —> sum_vale // 2。0-1背包有二维的实现,一维的实现,一维的实现必须先遍历物品,再倒序遍历容量。解释:数组可以分割成 [1, 5, 5] 和 [11]。解释:数组不能分割成两个元素和相等的子集。输入:nums = [1,5,11,5]输入:nums = [1,2,3,5]

qq_44486787的博客 428

求职刷题力扣DAY27--回溯算法part03

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。输出:[“1.0.10.23”,“1.0.102.3”,“10.1.0.23”,“10.10.2.3”,“101.0.2.3”]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的。输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

qq_44486787的博客 526

leetcode刷题-动态规划part01

楼梯一共有1阶台阶:1种;三阶台阶:3种(1阶+2阶)递推关系:依赖于前两种状态,f(n)=f(n-1)+f(n-2)斐波那契数: 1 1 2 3 5 8。相当于爬楼梯题目的消费版。其实就是 斐波那契数。

emmmmXxxy的博客 517

求职刷题 力扣 day16 ---二叉树part03

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。示例: 给定二叉树 [3,9,20,null,null,15,7],给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。说明:叶子节点是指没有子节点的节点。给定一个二叉树,找出其最小深度。

qq_44486787的博客 468

Leetcode-2021.03记录-part1

文章目录三月刷题记录-part1338. 比特位计数1. 动态规划-低位有效判断2. 动态规划-设置最低有效位896. 单调数列303. 区域和检索 - 数组不可变1. 暴力破解2. 构建数组进行巧妙的解决304. 二维区域和检索 - 矩阵不可变232. 用栈实现队列224. 基本计算器1047.删除字符串中所有相邻重复项331. 验证二叉树的前序序列化 三月刷题记录-part1 338. 比特位计数 题目链接 题目描述 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其

qq_38557583的博客 248

【LeetCode】升级打怪之路 Day 03:链表 part 1

Day 03:链表 part 1

VLyb 432
上一篇: Leetcode 刷题笔记1 图论part02
下一篇: Leetcode 刷题笔记1 图论part04
平乐君
博客等级 码龄5年 65粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值