java - 是否可以在 O(n) 时间内生成子数组?

标签 java arrays arraylist data-structures time-complexity

我试图借助以下代码生成子数组,但该代码的时间复杂度为 O(n^3)。请帮我找出最佳的方法。

我的代码如下:

 static ArrayList<ArrayList<Integer>> solve(List<Integer> a) {
  ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>(); 

    for(int i=0;i<a.size();i++)
    {
        for(int j=i;j<a.size();j++)
        {
           ArrayList<Integer> temp=new ArrayList<Integer>();  
           for(int k=i+1;k<=j;k++)
               {
                    temp.add(a.get(k));

               }

           res.add(temp)

        }

    }
    return res;
}

最佳答案

如果您不需要列表独立于原始列表a,您可以使用ListsubList方法。 https://docs.oracle.com/javase/7/docs/api/java/util/List.html

这会将复杂度降低至 O(n^2)

关于java - 是否可以在 O(n) 时间内生成子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52234455/

相关文章:

Java - 如果您可以扩展任何类,那么抽象类的意义何在?

java - 按升序对数组元素进行排序

Java 正则表达式 for ,后面不跟空格

java - JPA:根据自增id生成代码

arrays - 在VBA中声明数组变量

javascript - 无法更改函数内的全局变量(Javascript)

java - 当 nextInt 等于 0 时如何终止程序?

java - 解析通用 ArrayList 中存在的 JSONArray

java - 多个线程访问一个 ArrayList

java - 使用 Java 正则表达式匹配重复的 HTML 模式