首页 > 其他分享 >433. 最小基因变化(Queue使用ArrayList和LinkedList进行声明)

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

时间:2024-01-13 15:31:52浏览次数:26  
标签:LinkedList 队列 ArrayList next Queue String

这道题可以看成一个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的区别:

底层数据结构:


ArrayList基于动态数组实现,它可以动态增长和缩小。

插入和删除元素可能涉及重新分配内存和数据复制。

适用场景:


当需要随机访问队列中的元素时,ArrayList是更好的选择,因为它支持通过索引直接访问元素。

如果需要频繁对队列进行随机访问、而且对队列的修改操作相对较少时,可以考虑使用ArrayList实现Queue。

使用LinkedList声明Queue的区别:

底层数据结构:


LinkedList基于双向链表实现,每个元素都指向前一个和后一个元素。

插入和删除元素的时间复杂度为O(1),因为只需要调整指针而不需要大量数据的搬移。

适用场景:


当需要频繁对队列进行插入、删除操作时,LinkedList是更好的选择,因为它的插入和删除操作效率更高。

如果队列的操作主要是在两端进行(即头部和尾部),比如经常需要在队列头部和尾部进行插入、删除操作,可以考虑使用LinkedList实现Queue。

综合考虑:

如果对队列中的元素进行频繁的随机访问,可以选择ArrayList实现Queue。

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

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

标签:LinkedList,队列,ArrayList,next,Queue,String
From: https://blog.51cto.com/u_15319978/9232565

相关文章

  • AQS (AbstractQueuedSynchronizer) 概述
    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.c......
  • Oracle 10g enqueue waits
    Oracle10genqueuewaitsEnqueueTypeDescriptionenq:AD–allocateAUSynchronizesaccessestoaspecificOSM(OracleSoftwareManager)diskAUenq:AD–deallocateAUSynchronizesaccessestoaspecificOSMdiskAUenq:AF–tasks......
  • C#中Queue队列的基本使用示例
       在C#中,Queue是一个内置的FIFO(First-In-First-Out)集合,这意味着元素在队列中的顺序与它们被添加的顺序相同,当且仅当从队列中移除元素时,元素出队的顺序才是正确的。Queue在.NETFramework中是一个泛型集合类型,这意味着你可以存储任何类型的元素。它提供了许多方法来操作队列,......
  • 【C++】STL 容器 - priority_queue 优先级队列容器 ( 容器简介 | 容器操作性能分析 |
    文章目录一、priority_queue优先级队列容器1、priority_queue优先级队列容器简介2、priority_queue优先级队列容器操作性能分析二、代码示例-priority_queue优先级队列容器1、默认优先级队列容器2、最大值优先级队列3、最小值优先级队列一、priority_queue优先级队列容器......
  • 【C++】STL 容器 - queue 队列容器 ( queue 容器简介 | queue 容器特点 | push 函数 |
    文章目录一、queue队列容器简介1、queue队列容器引入2、queue队列容器特点二、queue队列常用api函数1、队尾插入函数-queue#push函数2、队头删除函数-queue#pop函数3、获取队首元素-queue#front函数一、queue队列容器简介1、queue队列容器引入queue队列容......
  • 【JDK源码】Java中LinkedList的实现
    JDK版本:1.8.0_271基础介绍LinkedList底层数据结构是一个双向链表:链表的每个节点叫做Node,在Node中,prev属性表示前一个节点的位置,next属性表示后一个节点的位置first是双向链表的头节点,它的前一个节点是nulllast是双向链表的尾节点,它的后一个节点是null当链表中没有数据时,fi......
  • 【JDK源码】ArrayList的代码实现
    JDK版本:1.8.0_271基础介绍ArrayList底层数据结构就是一个数组:index表示数组下标,从0开始计数,elementDatda表示数组本身DEFAULT_CAPACITY表示数组的初始化大小,默认是10size表示数组的大小,int类型,没有使用volatile修饰,非线程安全modCount统计当前数组被修改的版本次数,数......
  • C++STL常用容器queue和stack
    2.5stack容器2.5.1stack基本概念概念:stack是一种先进后出(FirstInLastOut,FILO)的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入数据称为---入栈push栈中弹出数据称为---出栈pop生活中的栈:子弹进弹夹出弹夹的过程2.5.2s......
  • 【并发编程】CopyOnWriteArrayList详解与原理
    ......
  • 24-集合(主要介绍ArrayList)
    ArrayList长度可变的原理1)当创建ArrayList集合容器的时候,底层会存在一个长度为10哥大小的空数组2)当容器的大小不满足时,创建(扩容)原数组1.5倍大小的新数组3)将原数组数据,拷贝到新数组中4)将新元素添加到新数组 ArrayList集合的构造方法1)publicArrayList():创建一个空的集......