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.mzph.cn/news/613749.shtml

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

相关文章

GO语言Context的作用

文章目录 Context为什么需要Context多任务超时例子Context结构 Context各种使用方法创建contextvalueCtxvalueCtx结构体WithValue cancelCtxcancelCtx结构体withCancel timerCtxWithDeadlineWithTimeout 总结 Context 为什么需要Context Go语言需要Context主要是为了在并发环…

初识C语言·内存函数

1 memcpy的使用和模拟实现 紧接字符串函数&#xff0c;出场的是第一个内存函数memcpy。前面讲的字符串函数是专门干关于字符串的事的&#xff0c;而这个函数可以干strcpy一样的事&#xff0c;但是区别就是它碰到\0也会继续复制。 函数的头文件是string&#xff0c;返回类型是v…

如何从 Keras 中的深度学习目录加载大型数据集

一、说明 数据集读取&#xff0c;使用、在磁盘上存储和构建图像数据集有一些约定&#xff0c;以便在训练和评估深度学习模型时能够快速高效地加载。本文介绍Keras 深度学习库中的ImageDataGenerator类等工具自动加载训练、测试和验证数据集。 二、ImageDataGenerator加载数据集…

2024.1.11

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);speechnew QTextToSpeech(this);id1startTimer(1000);//设置文本到中间ui->sys_label->setAlignment(Qt:…

20240107移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通能上网

20240107移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通能上网 2024/1/7 11:17 开发板&#xff1a;Firefly的AIO-3399J【RK3399】SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2.ab …

Java的Netty

1.基本概念介绍 有了Netty&#xff0c;你可以实现自己的HTTP服务器&#xff0c;FTP服务器&#xff0c;UDP服务器&#xff0c;RPC服务器&#xff0c;WebSocket服务器&#xff0c;Redis的Proxy服务器&#xff0c;MySQL的Proxy服务器等等。 Netty 是一个基于 Java 的高性能网络应…

红队打靶练习:BREACH: 1

信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.110.1 00:50:56:c0:00:08 …

RK3568驱动指南|第十篇 热插拔-第118章 使用udev挂载U盘和T卡实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

CTF-PWN-沙箱逃脱-【seccomp和prtcl-1】

文章目录 啥是seccomp#ifndef #define #endif使用使用格式 seccomp无参数条件禁用系统调用有参数条件禁用系统调用 prctl实例 seccomp_export_bpf 啥是seccomp 就是可以禁用掉某些系统调用&#xff0c;然后只能允许某些系统调用 #ifndef #define #endif使用 #ifndef #defin…

Day4Qt

1.头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime>//时间类 #include <QTimer>//时间事件类 #include <QTimerEvent>//定时器类 #include <QTextToSpeech> namespace Ui { class Widget; }class Widget : publi…

JMeter 批量接口测试

一、背景 最近在进行某中台的接口测试准备&#xff0c;发现接口数量非常多&#xff0c;有6、70个&#xff0c;而且每个接口都有大量的参数并且需要进行各种参数验证来测试接口是否能够正确返回响应值。想了几种方案后&#xff0c;决定尝试使用JMeter的csv读取来实现批量的接口…

SFT会改善LLM性能,RLHF可能会损害性能

SFT&#xff08;Structured Fine-Tuning&#xff09;是一种模型优化技术&#xff0c;它通过在预训练的语言模型上进行有针对性的微调&#xff0c;以适应特定任务或领域。SFT可以提高性能的原因有几个&#xff1a; 领域自适应&#xff1a;预训练的语言模型通常在大规模通用语料库…

vscode 创建文件自动添加注释信息

随机记录 目录 1. 背景介绍 2. "Docstring Generator"扩展 2.1 安装 2.2 设置注释信息 3. 自动配置py 文件头注释 1. 背景介绍 在VS Code中&#xff0c;您可以使用扩展来为新创建的Python文件自动添加头部注释信息。有几个常用的扩展可以实现此功能&#xff0…

eChart显示时等比例缩放

eChart会在不同分辨率的显示器中显示&#xff0c;要求显示内容可以等比例缩放&#xff0c;transform的原点是内容的中心位置&#xff0c;直接使用transform.scale缩放会导致有些内容溢出屏幕 screen的左上角移动到屏幕的中心计算出比例&#xff0c;以screen左上角为原点&#…

leetcode-二进制求和

67. 二进制求和 class Solution:def addBinary(self, a: str, b: str) -> str:result carry 0for i in range(max(len(a), len(b))):a_bit a[-(i1)] if i < len(a) else 0b_bit b[-(i1)] if i < len(b) else 0sum_bit int(a_bit) int(b_bit) carryresult str…

Vue3:使用解构赋值来读取对象里的键-值对(值也是对象)

一、前言 在Vue3中&#xff0c;想要读取一个对象的“键—值”对&#xff08;值也是一个对象&#xff09;&#xff0c;数据格式如下&#xff1a; {1:{courseName: 课程1, study: 951526, visit: 3785553}&#xff0c;2:{courseName: 课程2, study: 181630, visit: 380830}&…

springboot+ipage分页频繁请求会报错 自动添加多一个limit

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near LIMIT 500 at line 3 这个原因是因为springboot配置mysql的连接池太…

nginx sendfile

http模块中有一个sendfile指令&#xff0c;默认开启的 简单来说就是启用sendfile()系统调用来替换read()和write()调用&#xff0c;减少系统上下文切换从而提高性能&#xff0c; 当 nginx 是静态文件服务器时&#xff0c;能极大提高nginx的性能表现&#xff0c; 而当 nginx 是…

在线问卷调查的优势:提升数据收集与分析效率的关键要素

无论是在工作中还是学习中&#xff0c;我们经常会使用问卷调查法来解决一些问题。不过&#xff0c;问卷调查有两种形式——线上和线下&#xff0c;这两者之间有什么优势和不足呢&#xff1f; 纸质问卷&#xff1a; 1、优势&#xff1a; 我们在使用纸质问卷的时候&#xff0c;通…

十年磨一剑,写在美国比特币现货ETF获批后

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 两天前&#xff0c;我们提出&#xff0c;对于比特币现货ETF市场。十年磨一剑&#xff0c;今天&#xff0c;这一里程碑终于到来。美国证监会&#xff08;SEC&#xff09;批准了11只比特币现货ETF&#xff0c;将会在芝…