Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归函数,在递归过程中从输入数组中删除元素_Java_Algorithm_Recursion_Algorithmic Trading_Array Algorithms - Fatal编程技术网

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

Java 递归函数,在递归过程中从输入数组中删除元素,java,algorithm,recursion,algorithmic-trading,array-algorithms,Java,Algorithm,Recursion,Algorithmic Trading,Array Algorithms,实际上,我需要k个不同的可能元素数组中所有不重复的组合。例如[1,3,2,3,4,2,1]-->所有的组合,包括每个数字(1,2,3,4)恰好一次 我有一个递归函数,它工作得非常好,但是对于一个巨大的输入数组,它需要花费太多的时间来运行。这就是为什么我希望在递归过程中从输入数组中删除候选对象。只要我的组合中有一个2,我就可以通过移除所有剩余的2来减少数组。我无法找到一种不影响其他递归分支的方法。。。这里遵循100%的工作算法,但它是不可扩展的。。。我正在寻找一种方法来增强它,即边删除边输入数组

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

static void maximalTimeRangeUtil(列表元、列表机会时刻、列表股票类型、列表时刻数据、列表类型数据、int开始、int结束、int索引、int r){
如果(索引==r){
Set same=新哈希集(typesData);
如果(相同的.size()==typesData.size()){
List mins=new ArrayList();

对于(int m=0;mI可能误解了您的问题,但为什么不在调用递归方法之前从列表中删除重复项呢?因为它们与另一个长度相同、数字不同的数组相关,因此它们具有不同的基本属性meaning@Cl因此,如果没有副本,就无法创建阵列的副本es?也许你可以通过阵列24次?@Yola我为什么要这么做?