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

433. 最小基因变化(Queue使用ArrayList和LinkedList进行声明)

这道题可以看成一个24叉树。

因为基因序列长度固定为8,且每个位置的字母固定是AGCT,可以选择改变的只有3个字母,所以一次最多24种情况。

然后检查变化后的结果是否存在bank中(使用hashSet来存储),同时设置一个visited集合来检查是否访问过。

class Solution {public int minMutation(String startGene, String endGene, String[] bank) {if (startGene.equals(endGene))return 0;char[] keys = { 'A', 'G', 'C', 'T' };Set<String> cnt = new HashSet<>();Set<String> visited = new HashSet<>();for (String str : bank) {cnt.add(str);}if (!cnt.contains(endGene))return -1;Queue<String> q = new ArrayDeque<>();q.offer(startGene);visited.add(startGene);int step = 1;while (!q.isEmpty()) {int size = q.size();for (int i = 0; i < size; ++i) {String curr = q.poll();for (int u = 0; u < 8; ++u) {for (int v = 0; v < 4; ++v) {if (keys[v] != curr.charAt(u)) {StringBuffer sb = new StringBuffer(curr);sb.setCharAt(u, keys[v]);String next = sb.toString();if (!visited.contains(next) && cnt.contains(next)) {if (next.equals(endGene))return step;visited.add(next);q.offer(next);}}}}}++step;}return -1;}
}

拓展:Queue使用ArrayList和LinkedList进行声明的区别
在Java中,Queue可以使用ArrayList和LinkedList进行声明。这两种数据结构在实现Queue时有一些区别。

使用ArrayList声明Queue的区别:

  1. 底层数据结构

    • ArrayList基于动态数组实现,它可以动态增长和缩小。
    • 插入和删除元素可能涉及重新分配内存和数据复制。
  2. 适用场景

    • 当需要随机访问队列中的元素时,ArrayList是更好的选择,因为它支持通过索引直接访问元素。
    • 如果需要频繁对队列进行随机访问、而且对队列的修改操作相对较少时,可以考虑使用ArrayList实现Queue。

使用LinkedList声明Queue的区别:

  1. 底层数据结构

    • LinkedList基于双向链表实现,每个元素都指向前一个和后一个元素。
    • 插入和删除元素的时间复杂度为O(1),因为只需要调整指针而不需要大量数据的搬移。
  2. 适用场景

    • 当需要频繁对队列进行插入、删除操作时,LinkedList是更好的选择,因为它的插入和删除操作效率更高。
    • 如果队列的操作主要是在两端进行(即头部和尾部),比如经常需要在队列头部和尾部进行插入、删除操作,可以考虑使用LinkedList实现Queue。

综合考虑:

  • 如果对队列中的元素进行频繁的随机访问,可以选择ArrayList实现Queue。
  • 如果对队列中的元素进行频繁的插入、删除操作,可以选择LinkedList实现Queue。

在实际应用中,需要根据具体的场景和需求来选择合适的数据结构来实现Queue。

http://www.lryc.cn/news/278947.html

相关文章:

  • MYSQL双主节点–更换ip
  • 一文玩转Go语言中的面向对象编程~
  • kylin集群反向代理(健康检查)
  • 【docker】centos7安装harbor
  • 2024 年 1 月安全更新修补了 58 个漏洞(Android )
  • 数据库系统概念 第七版 中文答案 第3章 SQL介绍
  • 什么是数通技术?以太网交换机在数通技术中的精要
  • php 的数学常用函数
  • Netty-Netty组件了解
  • 银行的压力测试如何进行?
  • QtService、托盘程序使用
  • 使用Linux防火墙管理HTTP流量
  • 图鸟引入多套字体图标的方式教程
  • 在openEuler环境下快速编译GreatSQL RPM包
  • C语言基础语法跟练 day3
  • 【控制篇 / 策略】(7.4) ❀ 01. IP地理位置数据库和地理地址对象 ❀ FortiGate 防火墙
  • NX二次开发点通过云配准获取相同体
  • 5.4 Android BCC环境搭建(eadb版 下)
  • 【AI视野·今日Robot 机器人论文速览 第七十四期】Wed, 10 Jan 2024
  • 服务端性能测试——性能测试工具JMeter-L1
  • C# OpenCvSharp DNN FreeYOLO 目标检测
  • U盘启动安装win11遇到缺少计算机所需的介质驱动程序问题
  • 正则表达式、文件访问(Python实现)
  • ES高级查询
  • RT-Thread入门笔记6-空闲线程及两个常用的钩子函数
  • 网络正常运行时间监控工具
  • DEJA_VU3D - Cesium功能集 之 112-获取圆节点(1)
  • Matlab 建文件夹保存本次仿真图表数据和参数
  • @JsonFormat与@DateTimeFormat
  • 半监督学习 - 自训练(Self-training)