算法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,一经查实,立即删除!

相关文章

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 的状态由版本和读写锁持有计数组成。 获取锁方法返回一个邮戳&…

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重平衡 消费者核心配置示例代码高级提交偏移量的几种方式自动提交手动同步提交手动异步提交提交特定…

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

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

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…

node 中间件使用例子

NodeJS在中间件领域有着较为广泛的应用&#xff0c;他能做一些中间层事件&#xff0c;把服务端一部分的代码抽出来&#xff0c;减少处理冗余事情付出的代价&#xff0c;同时让服务真正做业务处理而不用关心页面的事情 常见的应用场景有&#xff1a; 跨域&#xff1a;解决跨域问…

二叉树左右树交换

leetcode 226题 翻转二叉树 题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3]…

背就有效!2024下《系统架构设计师》50个高频考点汇总

宝子们&#xff01;上半年软考已经结束一段时间了&#xff0c;准备备考下半年软考高级-系统架构设计师的小伙伴可以开始准备了&#xff0c;毕竟高级科目的难度可是不低的&#xff0c;相信参加过上半年架构的小伙伴深有体会。 这里给大家整理了50个高频考点&#xff0c;涵盖全书…

node更改npm缓存存储位置-并配置环境变量

更改缓存位置 node安装完成之后,在安装目录中新建一个存放缓存的文件夹node_cache 此时这个文件夹必须使用管理员权限才能更改,这使得命令行下使用npm进行下载的时候总是报权限不足的错误:permit 解决办法: 右键 -> 属性 -> 安全 -> 编辑 -> 选择user -> …

【Linux】进程_3

文章目录 五、进程3. 进程4. 进程状态 未完待续 五、进程 3. 进程 在当前&#xff0c;我们只能通过执行可执行程序来让操作系统帮我们启动进程&#xff0c;那我们如何使用代码来自己启动进程呢&#xff1f;我们可以使用 fork() 函数。作用是创建子进程。 我们创建一个程序来…

字节扣子搭建大模型擂台:匿名PK效果,用户当裁判,跑分时代要结束了

字节跳动的扣子&#xff08;coze.cn&#xff09;&#xff0c;给国产大模型们组了个大局—— 在同一个“擂台”上&#xff0c;两个大模型为一组&#xff0c;直接以匿名的方式PK效果&#xff01; 例如我们对两位参赛“选手”同时提问今年高考的题目&#xff1a; 阅读下面的材料&…

探索数字化转型:提升企业客户服务竞争力的策略

当前&#xff0c;数字经济已成为引领经济发展的“主引擎”。在这一背景下&#xff0c;客户服务领域也在发生着深刻变化&#xff0c;传统的以客服热线、人工客服为核心的客户服务模式已不能满足企业发展的需要&#xff0c;而数字化转型成为企业寻求突破的必然选择。 企业可利用大…