如何减少此代码的执行时间
Posted
技术标签:
【中文标题】如何减少此代码的执行时间【英文标题】:How can i reduce Execution Time for this code 【发布时间】:2019-10-04 16:42:22 【问题描述】:import java.util.*;
import java.io.*;
public class Solution
public static void main(String[] args)
/* Enter your code here. Print output to STDOUT. Your class should be named Solution. */
Scanner sc= new Scanner(System.in);
int siz= sc.nextInt();
int max= sc.nextInt();
CircularQueue<Long> queue = new CircularQueue<>(max);
while(siz-->0)
queue.add(sc.nextLong());
System.out.println(queue.size());
for(int i=queue.size();i>0;i--)
System.out.print(queue.get(i-1)+" ");
public static class CircularQueue<E> extends LinkedList<E>
private int capacity = 10;
public CircularQueue(int capacity)
this.capacity = capacity;
@Override
public boolean add(E e)
if(contains(e))
return true;
if(size() >= capacity)
removeFirst();
return super.add(e);
在这个程序中,我创建了固定大小的链接列表,其中在添加大于列表大小的值时,它会删除旧值并在最后添加新值。
建议在不改变逻辑的情况下对代码进行一些更改。提前致谢
【问题讨论】:
代码的哪一部分对你来说很慢? 这里唯一可以提速的是contains()
方法,因为继承自LinkedList
的方法具有线性时间复杂度
尝试在codereview转发
【参考方案1】:
LinkedList 的contains()
在最坏的情况下有 O(n) 时间。
为此目的构造一个辅助HashSet
,或者发明另一种方法来追踪已经出现的元素。
【讨论】:
【参考方案2】:扫描器类对于大输入来说很慢,所以尽量避免它。您可以使用比 Scanner 类更快的 BufferedReader 类。
Scanner 是一个比 BufferedReader 更强大的实用程序,但 BuffredReader 的缓冲区 (8KB) 比 Scanner (1KB) 大得多,而且 Scanner 使用正则表达式来读取和解析文本输入,这使其速度很慢。
【讨论】:
【参考方案3】:main 方法中对 queue.size 的调用。 如果您调用一次并保存其值,然后在 sysout 语句和 for 循环中重复使用,则可以保存一个计算。
避免泛化导入。前任。导入 java.io.* 准确放置您想要专门访问的软件包。 这也可以节省一点时间。
【讨论】:
欢迎来到 *** 阿丹。如果您添加一些代码,您的答案可能会更好。 ***.com/help/how-to-answer以上是关于如何减少此代码的执行时间的主要内容,如果未能解决你的问题,请参考以下文章