实际上,我需要在一个由k个不同的可能元素组成的数组中没有重复的所有组合。例如[1,3,2,3,4,2,1]->所有的组合,包括每个数字(1,2,3,4)恰好一次。
我有一个递归函数,它工作得非常好,但是对于一个巨大的输入数组,它需要花费太多的时间来运行。这就是为什么我想在递归过程中从输入数组中删除候选对象。只要我的组合中有一个2,我就可以通过移除所有剩余的2来减少数组。我无法找到一种不影响其他递归分支的方法。。。这里遵循100%的工作算法,但它是不可扩展的。。。我正在寻找一种方法,通过删除输入数组来增强它。
static void maximalTimeRangeUtil( List<Integer> meta, List<Integer> opportunityMoments,List<Integer> stockTypes, List<Integer> momentsData, List <Integer> typesData, int start, int end, int index, int r) {
if (index == r) {
Set<Integer> same = new HashSet<Integer>(typesData);
if(same.size()==typesData.size()) {
List<Integer> mins = new ArrayList<>();
for(int m=0; m<momentsData.size()-1 ;m++) {
mins.add(momentsData.get(m+1)-momentsData.get(m));
}
meta.add(Collections.min(mins));
}
return;
}
for (int i=start; i<=end && end-i+1 >= r-index; i++) {
typesData.set(index, stockTypes.get(i));
momentsData.set(index, opportunityMoments.get(i));
maximalTimeRangeUtil( meta,opportunityMoments, stockTypes, momentsData,typesData, i+1, end, index+1, r);
}
}
暂无答案!
目前还没有任何答案,快来回答吧!