当前位置: 首页 > news >正文

力扣算法刷题 Day 53

110 字符串接龙

题目链接

添加链接描述

思路

可以模拟成无向图的最短路径。两个相邻单词(仅一位不同)可以连一条边。关键点在于将点连起来以及使用广搜找到第一个终点即为最短路径。

文章详解

添加链接描述

#include<iostream>#include<vector>#include<string>#include<unordered_set>#include<unordered_map>#include<queue>usingnamespacestd;intmain(){string beginStr,endStr,str;intn;cin>>n;unordered_set<string>strSet;cin>>beginStr>>endStr;for(inti=0;i<n;i++){cin>>str;strSet.insert(str);}// 记录strSet里的字符串是否被访问过,同时记录路径长度unordered_map<string,int>visitMap;// <记录的字符串,路径长度>// 初始化队列queue<string>que;que.push(beginStr);// 初始化visitMapvisitMap.insert(pair<string,int>(beginStr,1));while(!que.empty()){string word=que.front();que.pop();intpath=visitMap[word];// 这个字符串在路径中的长度// 开始在这个str中,挨个字符去替换for(inti=0;i<word.size();i++){string newWord=word;// 用一个新字符串替换str,因为每次要置换一个字符// 遍历26的字母for(intj=0;j<26;j++){newWord[i]=j+'a';if(newWord==endStr){// 发现替换字母后,字符串与终点字符串相同cout<<path+1<<endl;// 找到了路径return0;}// 字符串集合里出现了newWord,并且newWord没有被访问过if(strSet.find(newWord)!=strSet.end()&&visitMap.find(newWord)==visitMap.end()){// 添加访问信息,并将新字符串放到队列中visitMap.insert(pair<string,int>(newWord,path+1));que.push(newWord);}}}}// 没找到输出0cout<<0<<endl;}

105 有向图的完全联通

题目链接

添加链接描述

思路

要使用深搜,由于是有向图且需要回溯,且需要根据每个节点的相连的边去搜索,因此使用邻接矩阵来存储图。dfs三部曲:

  1. 返回值和入口参数:返回值:void, 参数:graph,下一层数字key,已访问过的节点数组
  2. 终止:当前节点已被访问,返回;
  3. 单层搜索:将当前搜索节点相连的边都加入队列,依次向下搜素。
文章详解

添加链接描述

// 写法一:dfs 处理当前访问的节点#include<iostream>#include<vector>#include<list>usingnamespacestd;voiddfs(constvector<list<int>>&graph,intkey,vector<bool>&visited){if(visited[key]){return;}visited[key]=true;list<int>keys=graph[key];for(intkey:keys){// 深度优先搜索遍历dfs(graph,key,visited);}}intmain(){intn,m,s,t;cin>>n>>m;// 节点编号从1到n,所以申请 n+1 这么大的数组vector<list<int>>graph(n+1);// 邻接表while(m--){cin>>s>>t;// 使用邻接表 ,表示 s -> t 是相连的graph[s].push_back(t);}vector<bool>visited(n+1,false);dfs(graph,1,visited);//检查是否都访问到了for(inti=1;i<=n;i++){if(visited[i]==false){cout<<-1<<endl;return0;}}cout<<1<<endl;}

106 岛屿周长

题目链接

添加链接描述

思路

避免惯性思维,用不到搜索,直接遍历就很简单!总的陆地块数 * 4 - 相邻的边数 * 2

文章详解

添加链接描述

#include<iostream>#include<vector>usingnamespacestd;intmain(){intn,m;cin>>n>>m;vector<vector<int>>grid(n,vector<int>(m,0));for(inti=0;i<n;i++){for(intj=0;j<m;j++){cin>>grid[i][j];}}intdirection[4][2]={0,1,1,0,-1,0,0,-1};intresult=0;for(inti=0;i<n;i++){for(intj=0;j<m;j++){if(grid[i][j]==1){for(intk=0;k<4;k++){// 上下左右四个方向intx=i+direction[k][0];inty=j+direction[k][1];// 计算周边坐标x,yif(x<0// x在边界上||x>=grid.size()// x在边界上||y<0// y在边界上||y>=grid[0].size()// y在边界上||grid[x][y]==0){// x,y位置是水域result++;}}}}}cout<<result<<endl;}
http://www.jsqmd.com/news/706679/

相关文章:

  • 别再让手机GPU吃灰了!手把手教你用Termux编译NCNN,解锁安卓Vulkan加速
  • 时间序列分析实战:从基础到生产部署全解析
  • 线性代数在机器学习中的核心应用:从线性回归到矩阵运算
  • MacBook Pro用户必看:M4芯片的38 TOPS Neural Engine,真能让Stable Diffusion本地跑得更快吗?
  • AutoGen群聊模式:模拟真实团队协作的奥秘
  • 别再死记硬背公式了!用Python手把手带你实现Transformer的Sinusoidal位置编码(附完整代码)
  • 集成学习预测融合:原理、实战与优化策略
  • 山东大学创新实训项目小组进度(二)
  • 基于RAG与向量数据库的代码库AI智能体Atlas实战指南
  • 从‘酷女孩’到‘商务女性’:用Stable Diffusion + Lora 玩转AI人像风格化的实战心得
  • 别再硬编码IP了!K8s里Nginx反向代理Service的正确姿势(CoreDNS + Headless Service实战)
  • AWS CDK构造库实战:快速构建生成式AI应用基础设施
  • 学术海报自动化生成:从论文到海报的智能转换技术解析
  • 2026热门幕墙铝单板:冲孔铝板/双曲铝单板/双曲铝板/幕墙铝板/异型铝板/异形铝单板/木纹铝单板/木纹铝板/氟碳铝单板/选择指南 - 优质品牌商家
  • 从科研到临床:手把手教你用Python实现fNIRS脑网络的图论分析(附代码与数据)
  • OpenCV随机森林实现轻量级图像分类实战
  • 概率分布实战指南:从基础到应用
  • 机器学习模型选择:核心挑战与多维评估实践
  • 别再让电机发烫!STM32 FOC开环标定零电角度的安全操作与实战技巧
  • JARVIS-1:基于大语言模型的具身智能体在《我的世界》中的实现与优化
  • 明日方舟全自动助手MAA:如何用开源技术解放你的游戏日常
  • ToolGen项目解析:自动化LLM工具调用框架的设计与实战
  • 别只盯着新功能!聊聊UVM1.2那些“偷偷”优化性能和内存的细节
  • 使用Keras构建Seq2Seq神经机器翻译模型
  • 机器学习工程师职业指南:从入门到高薪就业
  • 从30%到80%:如何调整Kraken2的confidence参数提升宏基因组物种注释率
  • Windows进程模块枚举:绕过API,手把手教你用PEB_LDR_DATA自己实现(附完整C++代码)
  • 告别布线噩梦!手把手教你用AD21的FPGA管脚交换功能优化PCB设计
  • Agent failed before reply: LLM request failed: provider rejected the request schema or tool payload.
  • OpenCV视频处理:从基础到高级技术实践