算法day30

第一题

433. 最小基因变化

        题型转化:可以转化为边权为一的最短路问题

        将最开始的字符串定义为起点,我们将初识字符串每一个元素改变一次定义为移动一个位置,最后的字符串定义为中点,就这样每一次改变一个元素,最后成功改变成最终字符且改变的次数最少的次数就是我们需要的答案;

步骤一:

        使用hash表来存放基因库中的字符串,方便我们在改变字符后检查改变后的字符串是否合理;

        使用hash表2来存放我们已经改变过的字符串,这样方便我们检查我们的已经改变过的字符串变回原来的样子;

步骤二:

        将我们需要改变成的元素放在数组中,这样方便后期改变元素;

步骤三:

        我们改变后的字符串,判断条件(没有改变回之前的样子且满足基因库的条件),才可以存放进队列,进行以下一次的改变;

至此,代码如下:

class Solution {public int minMutation(String startGene, String endGene, String[] bank) {Set<String> vis = new HashSet<>();//用来标记已经搜索过的状态Set<String> hash = new HashSet<>();//用来统计基因库里面的字符串for(String s : bank){hash.add(s);}char[] cha = {'A','C','G','T'};if(startGene.equals(endGene)) return 0;if(!hash.contains(endGene)) return -1;Queue<String> q = new LinkedList<>();q.add(startGene);vis.add(startGene);int step = 0;while(!q.isEmpty()){step++;int size = q.size();while(size-- != 0){String t = q.poll();for(int i = 0;i < 8 ;i++){char[] tmp = t.toCharArray();//字符串变数组for(int j = 0 ;j< 4 ;j++){tmp[i] = cha[j];String next = new String(tmp);if(hash.contains(next) && !vis.contains(next)) {if(next.equals(endGene))return step;q.add(next);vis.add(next);}} }}}return -1;}
}

第二题

127. 单词接龙

本题分析如上题故事,代码如下:

class Solution {public int ladderLength(String beginWord, String endWord, List<String> wordList) {Set<String> hash = new HashSet<>();Set<String> vis = new HashSet<>();for(String s : wordList){hash.add(s);}if(!hash.contains(endWord)) return 0;Queue<String> q = new LinkedList<>();q.add(beginWord);vis.add(beginWord);int ret = 1;while(!q.isEmpty()){ret ++;int size = q.size();while(size-- != 0){String t = q.poll();for(int i = 0;i < t.length();i++){char[] tmp = t.toCharArray();for(char ch = 'a';ch <= 'z';ch++){tmp[i] = ch;String next = new String(tmp);if(hash.contains(next) && !vis.contains(next)){if(next.equals(endWord)) return ret;q.add(next);vis.add(next);}}}}}return 0;}
}

第三题

675. 为高尔夫比赛砍树

        如下图所示,为砍树的图,

        按照题意的规则,就是从(0,0)坐标出发,先到2砍树,再到6、7、9、9、21依次砍树;并最后返回移动的最短次数;

步骤一:

        首先我们遍历整个矩阵,将有树的位置都放入到一个队列中,并按照该位置中树的个数由小到大依次排序;

步骤二:

        我们按照上述队列中位置的顺序,依次进行bfs移动,并记录每一个位置到下一个位置的移动次数,当所有的有效位置都便利完成时即砍完树了,最后返回总移动的步数;        

至此,代码如下:

class Solution {int m,n;public int cutOffTree(List<List<Integer>> f) {m = f.size();n = f.get(0).size();//1、将所有的树放入到表中,并从小到大排序List<int[]> trees = new ArrayList<>();for(int i = 0; i<m; i++){for(int j = 0; j< n ;j++){if(f.get(i).get(j) > 1){trees.add(new int[]{i,j});}}}Collections.sort(trees,(a,b) -> {return f.get(a[0]).get(a[1]) -  f.get(b[0]).get(b[1]);});//2、按照顺序砍树int ret = 0;int bx = 0,by = 0;for(int[] t : trees){int x = t[0],y = t[1];int step = bfs(f,bx,by,x,y);if(step == -1) return -1;//此时到不了下一个节点,即砍不了树ret += step;bx = x;by = y;}return ret;}int[] dx = {0,0,1,-1};int[] dy = {1,-1,0,0};public int bfs (List<List<Integer>> f,int bx, int by, int ex, int ey){if(bx == ex && by == ey) return 0;Queue<int[]> q = new LinkedList<>();boolean[][] vis = new boolean[m][n];q.add(new int[]{bx,by});vis[bx][by] = true;int step = 0;while(!q.isEmpty()){step ++;int sz = q.size();while(sz-- != 0){int[] t = q.poll();int a = t[0],b = t[1];for(int i = 0; i < 4;i++){int x = a+dx[i],y = b+dy[i];if(x >= 0 && y >=0 && y<n && x<m && f.get(x).get(y) != 0 && !vis[x][y]){if(x == ex && y == ey) return step;q.add(new int[]{x,y});vis[x][y] = true;}}}} return -1;}
}

ps:本次的内容就到这里了,如果对你有所帮助的话就请一键三连哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/27201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小学生期刊知网//《小学生》评职称认可吗?

小学生期刊知网//《小学生》评职称认可吗&#xff1f; 【小学生】属于省级期刊&#xff0c;是正规的学术出版物。在教师评职称过程中&#xff0c;很多地方都认可。但具体的认可情况会因地区、学校以及职称评定的具体要求而有所不同。 主管单位&#xff1a;共青团山西省委员会和…

Lianwei 安全周报|2024.06.11

新的一周又开始了&#xff0c;以下是本周「Lianwei周报」&#xff0c;我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件&#xff0c;保证大家不错过本周的每一个重点&#xff01; 政策/标准/指南最新动态 01 新加坡发布《生成式人工智能治理模型框架》 该框…

aac如何转化mp3?超好用的四种音频转换方法!

aac如何转化mp3&#xff1f;AAC格式可能鲜为人知&#xff0c;但实际上它是一种音频文件格式&#xff0c;然而&#xff0c;AAC的应用却不太广泛&#xff0c;这并非偶然&#xff0c;首先&#xff0c;使用AAC需要支付专利费用&#xff0c;这对于个人和公司都可能是一笔不小的开支&…

2024【大模型】国内市场如何?程序员该何时入局?

1.市场形势 根据最新的市场研究报告&#xff0c;2023年中国的大模型市场呈现出显著的发展趋势和广阔的前景。以下是关于中国大模型市场的几个关键点&#xff1a; 市场规模和增长&#xff1a;2023年&#xff0c;中国AI大模型行业的市场规模达到了147亿元人民币&#xff0c;预计…

【星海随笔】云解决方案学习日志篇(三) 工作原理篇

Filebeat工作原理 Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent ,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。 使用了背压敏感协议,因此不会使管道过载。当Logstash数据处理繁忙时,…

HCIA 10 网络安全之结合ACL访问控制列表登录Telnet及FTP

ACL 本质上是一种报文过滤器&#xff0c;规则是过滤器的滤芯。设备基于这些规则进行报文匹配&#xff0c;可以过滤出特定的报文&#xff0c;并根据应用 ACL 的业务模块的处理策略来允许或阻止该报文通过。 1.实验介绍及拓扑 R3 为telnet服务器&#xff0c;R1 为客户端&#…

BFT机器人采购,是制造业最适合的选择!

随着制造业的转型升级&#xff0c;越来越多的企业开始认识到引入机器人技术的重要性。那么面临选择在哪里购&#xff0c;哪里可以安心购&#xff0c;就成为了大家所关注的热点。 BFT为您提供一站式的机器人采购服务&#xff0c;凭借独特的优势和全面且专业的服务&#xff0c;正…

Java多线程-StampedLock(原子读写锁)

StampedLock 是读写锁的实现&#xff0c;对比 ReentrantReadWriteLock 主要不同是该锁不允许重入&#xff0c;多了乐观读的功能&#xff0c;使用上会更加复杂一些&#xff0c;但是具有更好的性能表现。StampedLock 的状态由版本和读写锁持有计数组成。 获取锁方法返回一个邮戳&…

浅浅了解下Spring中生命周期函数(Spring6全攻略)

你好&#xff0c;这里是codetrend专栏“Spring6全攻略”。 Spring框架设计生命周期回调函数的主要目的是为了提供一种机制&#xff0c;使开发人员能够在对象创建、初始化和销毁等生命周期阶段执行特定的操作。这种机制可以帮助开发人员编写更加灵活和可维护的代码。 举个例子…

LogicFlow 学习笔记——4. LogicFlow 基础 边 Edge

边 Edge 和节点一样&#xff0c;LogicFlow 也内置一些基础的边。LogicFlow 的内置边包括&#xff1a; 直线 - line直角折现 - polyline贝塞尔曲线 - bezier 新建 src/views/Example/LogicFlow/Example08.vue 并编写如下代码&#xff1a; <script setup lang"ts&quo…

图解系列 图解Kafka之Consumer

文章目录 术语消息主题和分区集群和分区副本消费者组重新平衡组/分区再均衡消费者的分区策略群组协调者Coordinator 和群组领导者 Group Leader 流程初始化流程消费流程Consumer重平衡 消费者核心配置示例代码高级提交偏移量的几种方式自动提交手动同步提交手动异步提交提交特定…

鸿蒙开发电话服务:【@ohos.telephony.call (拨打电话)】

拨打电话 call模块提供呼叫管理功能&#xff0c;包括拨打电话、跳转到拨号界面、获取通话状态、格式化电话号码等。 如需订阅通话状态请使用[observer.on(callStateChange)] 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角…

深入解析 Java 标准库:构建高效应用的基石

Java 标准库&#xff0c;也称为 Java API&#xff0c;是一组预先编写的类和接口&#xff0c;为 Java 应用程序提供了一系列丰富的功能。这些库被组织成包&#xff08;packages&#xff09;&#xff0c;每个包都包含了一组相关的类和接口&#xff0c;用于处理特定的任务&#xf…

前端数据库大盘点:解锁Web应用数据存储最优解!

在构建现代Web应用程序时&#xff0c;前端不仅要处理用户交互和展示逻辑&#xff0c;往往还需要承担一部分数据处理的任务&#xff0c;尤其是在单页面应用&#xff08;SPA&#xff09;和渐进式Web应用&#xff08;PWA&#xff09;中。这就引出了一个关键问题&#xff1a;前端应…

Python使用策略模式实现绘图功能

策略模式&#xff08;Strategy Pattern&#xff09;:允许定义一系列算法&#xff0c;将它们封装起来&#xff0c;使得它们可以互换。 实现绘制不同类型的图表&#xff08;如折线图、柱状图和饼图&#xff09;功能。 下面是一个示例&#xff0c;展示如何传入横坐标和纵坐标内容…

人工智能技术应用笔记(十二):搭建自带大模型微信,完美对接GPT-4o,Kimi等大模型,智能体平台Coze也能接

许多朋友对如何搭建自己的微信机器人非常感兴趣。今天就来教大家如何操作。 一、 准备工作 一台电脑或者云服务器&#xff0c;对配置要求不高&#xff0c;一般的电脑就行 大模型API调用的Key&#xff0c;比如GPT-4o&#xff0c;Kimi&#xff0c;Deepseek&#xff08;不知道怎…

使用Omnipeek进行Wifi/P2P抓包

前言 工作中解决Mirracast投屏连接失败的问题时&#xff0c;遇到了需要抓取wifi数据包的情况&#xff0c;记录一下配置和使用过程。 一、Omnipeek 的安装和配置 1.1 Omnipeek 安装 双击 setup.exe 进行安装 1.2 注册 注册时&#xff0c;版本写 71 &#xff0c;产生序列号和…

代码随想录算法训练营第36期 last day

最后一次更新&#xff0c;之后去复习专业课和简历 583两个字符串的删除操作 自己做出来了&#xff1a; Code: class Solution {public://找到公共子序列的最大长度dp 最小步数串1.size-dp串2.size-dp int minDistance(string word1, string word2) { vector<v…

Axios 请求响应拦截器 每次只发送一次请求封装

import axios from "axios"; import general from "/utils/general";const request axios.create({baseURL:general.serverUrl })const requestMap new Map() //保存每一次请求request.interceptors.request.use(req>{let oldRequest requestMap.get(re…

解决帝国cms栏目管理拼音乱码的问题

帝国CMS7.5版本utf-8版网站后台增加栏目生成乱码的问题怎么解决 1、需要改一个函数&#xff0c;并且增加一个处理文件&#xff0c;方法如下&#xff1a; 修改e/class/connect.php文件&#xff0c;找到ReturnPinyinFun函数&#xff0c;如未修改文件在4533-4547行&#xff0c;将…