java递归函数,在递归过程中从输入数组中删除元素

gzjq41n4  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(239)

实际上,我需要在一个由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); 
        } 
    }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题