本文介绍: 这道题可以看成一个24叉树。因为基因序列长度固定为8,且每个位置的字母固定是AGCT,可以选择改变的只有3个字母,所以一次最多24种情况。然后检查变化后的结果是否存在bank中(使用hashSet来存储),同时设置一个visited集合来检查是否访问过。拓展:Queue使用ArrayList和LinkedList进行声明的区别在Java中,Queue可以使用ArrayList和LinkedList进行声明。这两种数据结构在实现Queue时有一些区别。
这道题可以看成一个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。
原文地址:https://blog.csdn.net/qq_43606119/article/details/135538247
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_56322.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。