java很难找到时间复杂性
我刚刚解决了一个关于leetcode的问题,要求我找到一个给定目标的数字总和。我刚刚解决了它,但我很难找到它的时间复杂性。请帮忙
import java.util.*;
class Solution
{
List<List<Integer>> result=new ArrayList();
public List<List<Integer>> combinationSum2(int[] candidates, int target)
{
HashMap<List<Integer>,Integer> map=new HashMap();
List<Integer> temp=new ArrayList();
Arrays.sort(candidates);
help(candidates,0,target,map,temp);
return result;
}
private void help(int[] arr,int start,int target,HashMap<List<Integer>,Integer> storage,List<Integer> temp)
{
if(start>=arr.length)
return;
List<Integer> check=new ArrayList<>(temp);
check.add(arr[start]);
if(arr[start]==target)
{
if(storage.containsKey(check))
{
help(arr,start+1,target,storage,temp);
return;
}
else
{
temp.add(arr[start]);
result.add(temp);
storage.put(temp,1);
return;
}
}
if(arr[start]>target)
{
return;
}
help(arr,start+1,target,storage,temp);
help(arr,start+1,target-arr[start],storage,check);
}
}
# 1 楼答案
您通常有1
Arrays.sort(candidates)
个O(nlog(n))
。您还有1个递归调用和2个调用,它应该是O(2^n)
。因此,更糟糕的情况应该是O(2^n)
(O1)一个算法被称为运行恒定时间,而不管我们称之为O(1)的输入大小
O(n),如果它运行线性时间强>
O(logN)以对数计时运行
类似二进制搜索https://en.wikipedia.org/wiki/Binary_search_algorithm
O(n^2)2循环嵌套。 更多的嵌套迭代将导致O(n^3)O(n^4)
O(2^n)它随着输入的每一个加法而成倍增长强>