news 2026/4/28 6:04:46

自做算法题总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自做算法题总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 算法1:统计所有元素均为 g 的倍数的子数组个数
    • 思路
    • 复杂度
  • 算法2:扫雷风格——0/1矩阵中 1 标记为 9,0 输出周围 1 的个数
    • 思路
    • 复杂度
  • 算法3:DFS 分割矩阵为两个和相等的连通区域
    • 思路
    • 复杂度
  • 算法4:BFS多源扩展
    • 思路
    • 复杂度
  • 小结:

算法1:统计所有元素均为 g 的倍数的子数组个数

思路

  • 双指针(滑动窗口):用leftright维护当前窗口。
  • a[right]不是g的倍数时,窗口左端跳到上一个非法位置temp的右边,即left = temp + 1
  • 对于每个right,合法窗口长度为len = right - left + 1,其中所有长度为 2 及以上的子数组数量为len - 1,累加到结果。
  • 核心思想:不合法元素会切断窗口,将窗口切分成若干段,每段内所有元素都是 g 的倍数,因此,要对每段单独计数。

复杂度

  • 时间:O(n)
  • 空间:O(1)

算法2:扫雷风格——0/1矩阵中 1 标记为 9,0 输出周围 1 的个数

思路

  • 直接暴力即可:遍历每个格子,如果是 1 直接输出9;如果是 0,累加上、下、左、右、左上、右上、左下、右下共 8 个方向的数值。
  • 代码中使用八个方向的邻居直接求和,矩阵下标从 1 开始,四周用 0 填充(默认值),避免边界判断。

复杂度

  • 时间:O(n × m)
  • 空间:O(n × m)

算法3:DFS 分割矩阵为两个和相等的连通区域

思路

  • DFS 回溯 + 剪枝
    1. 这一题要先计算矩阵总和ans,若ans为奇数直接输出 0(不可能平分)。
    2. (0,0)出发进行 DFS,count记录当前已选格子的累加和。
    3. 剪枝:若count > ans/2,直接返回(已超一半)。
    4. 终止条件count == ans/2时,用当前格子数num更新最小值min
    5. 每次向四个方向尝试,使用flag[][]标记已访问,回溯时恢复状态。
  • 这道是求包含起点的连通块,使其和恰好为总和的一半,且格子数最小。

复杂度

  • 时间:指数级 O(4^(n×m))(剪枝后实际运行会好很多)
  • 空间:O(n×m)(递归栈 + 标记数组)

算法4:BFS多源扩展

思路

  • 多源BFS + 分层扩展:将所有初始的'g'(草地)位置作为多个起点存入队列,然后进行 BFS 分层遍历,每层代表一秒的蔓延过程。
  • 四方向扩散:每个'g'向上下左右四个邻域格子扩散,若遇到'.'(空地)则将其变为'g',并将新位置加入队列作为下一轮的扩散源点。
  • 时间步控制:通过外层while(k-->0)控制蔓延的轮数,每轮内先获取当前队列大小 ,即size,再对当前层的所有格子进行扩散,保证每个时间步只扩散一层(即每秒只蔓延一格距离)。
  • 边界检查:通过xx>=0 && xx<n && yy>=0 && yy<m,这样可以确保不越界。
    大概这样是不会出错且不会漏项

复杂度

  • 时间:O(n × m × k) —— 最坏的情况下每个格子可能被访问多次(k 轮每一轮都可能操作部分格子),不过,实际每个格子仅会在首次被变为'g'时入队一次,因此实际有效操作次数为 O(n × m)
  • 空间:O(n × m) —— 存储网格c[][]和队列(最坏情况下所有格子均为'g'入队)

小结:

四道算法题思路,第一个为python语法,剩余三个为Java语法

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 6:04:45

SDMatte模型推理性能优化:从单张到批处理的效率提升技巧

SDMatte模型推理性能优化&#xff1a;从单张到批处理的效率提升技巧 1. 效果展示&#xff1a;批处理带来的性能飞跃 SDMatte作为当前最先进的图像抠图模型&#xff0c;在实际应用中常常面临处理大量图片的需求。传统的单张推理方式虽然简单直接&#xff0c;但在处理大批量任务…

作者头像 李华
网站建设 2026/4/28 6:03:11

Git管理工具深度解析:从原理到企业级落地的全链路讲解

一、引言&#xff1a;为什么每个开发者都需要掌握Git在当今软件开发领域&#xff0c;Git已经成为版本控制的事实标准。无论是个人的学习项目、开源社区的协作&#xff0c;还是数百人规模的企业级产品开发&#xff0c;Git都扮演着不可或缺的角色。然而&#xff0c;一个普遍的现象…

作者头像 李华
网站建设 2026/4/28 5:58:25

基于Simulink的异物检测(FOD)与活体保护(LPD)逻辑仿真

目录 手把手教你学Simulink ——基于Simulink的异物检测&#xff08;FOD&#xff09;与活体保护&#xff08;LPD&#xff09;逻辑仿真 一、引言&#xff1a;安全是无线充电的生命线 二、系统架构与检测原理 1. 整体安全监控框架 2. 检测物理原理 三、核心检测模块详解 第…

作者头像 李华
网站建设 2026/4/28 5:58:21

国风模型生成效果进阶控制:使用ControlNet实现构图与姿态引导

国风模型生成效果进阶控制&#xff1a;使用ControlNet实现构图与姿态引导 你是不是也遇到过这样的情况&#xff1a;用AI生成国风图片时&#xff0c;脑子里明明有非常具体的画面——比如一位倚栏远眺的古装仕女&#xff0c;或者一座飞檐翘角的亭台楼阁——但模型生成的结果却总…

作者头像 李华
网站建设 2026/4/28 5:57:22

开源AI应用平台LobeHub:基于Next.js与插件架构的部署与开发指南

1. 项目概述&#xff1a;一个开源的AI应用构建平台如果你最近在关注AI应用开发&#xff0c;尤其是想快速搭建一个属于自己的ChatGPT风格界面&#xff0c;或者想集成多个AI模型来做个智能助手&#xff0c;那么你很可能已经听说过LobeHub这个名字。它不是一个单一的AI模型&#x…

作者头像 李华
网站建设 2026/4/28 5:56:24

KMS_VL_ALL_AIO:3分钟免费激活Windows和Office的终极完整指南

KMS_VL_ALL_AIO&#xff1a;3分钟免费激活Windows和Office的终极完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗而烦恼吗&#xff1f;Office试用期已过却无法使用…

作者头像 李华