如何减少此代码的执行时间

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

以上是关于如何减少此代码的执行时间的主要内容,如果未能解决你的问题,请参考以下文章

如何减少查询执行时间 vb.net webform

如何减少因子循环的执行时间和周期数?和/或代码大小?

如何减少 SVM 的执行时间

如何使用 Angular Decorator 减少重复代码?

如何预热Web API,减少初次执行时间

如何优化 SQL 查询以减少运行时间?