【发布时间】:2018-09-08 10:37:51
【问题描述】:
我正在尝试借助以下代码生成子数组,但此代码的时间复杂度为 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;
}
【问题讨论】:
-
我正在尝试生成子数组基于什么?
-
如果您必须生成所有可能的子数组,除了
O(n^3)之外,没有更好的方法可以做到这一点。但我认为你的目标是解决另一个问题,对吧? -
是的,我的目标是找到总和小于 5 的所有子数组。
-
但我想看看数组的最佳方式。如果在 O(n) 中无法生成子数组,那么我得到了答案。
-
也许您可以将问题编辑为“这在 O(n) 中是否可行?”或者?此外,一些示例输入和输出可能会稍微澄清这个问题(指“查找总和小于 5 的所有子数组”)。
标签: java arrays arraylist data-structures time-complexity