Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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
C++ 具有相同时间复杂性的不同行为_C++_Recursion_Backtracking_Recursive Backtracking - Fatal编程技术网

C++ 具有相同时间复杂性的不同行为

C++ 具有相同时间复杂性的不同行为,c++,recursion,backtracking,recursive-backtracking,C++,Recursion,Backtracking,Recursive Backtracking,我正在解决以下问题: 编写一个接受整数n并返回其因子的所有可能组合的函数。例如,12应返回: [ [2,6], [2,2,3], [3,4] ] 我提出了以下方法(在C++中): 这两种代码的时间复杂度是相同的(在我看来)。那么,为什么我的代码失败,而另一个代码在23848713上成功运行?我的意思是,我的代码中是否有一些明显的错误,或者是在线法官的问题 我感谢你的帮助 编辑:由于第一个循环(我将因子中的所有数字的乘积计算成每个),所以没有,我的代码高于O(n)。因此,它失败了 然而,当我用值n

我正在解决以下问题:

编写一个接受整数n并返回其因子的所有可能组合的函数。例如,
12
应返回:
[
[2,6],
[2,2,3],
[3,4]
]

我提出了以下方法(在C++中):

这两种代码的时间复杂度是相同的(在我看来)。那么,为什么我的代码失败,而另一个代码在
23848713
上成功运行?我的意思是,我的代码中是否有一些明显的错误,或者是在线法官的问题

我感谢你的帮助

编辑:由于第一个循环(我将
因子
中的所有数字的乘积计算成
每个
),所以没有
,我的代码高于
O(n)
。因此,它失败了

然而,当我用值
n/I
(而不是
n
)调用它时,我可以通过消除整个循环来完全消除O(n)因子。这是因为我不再需要检查产品是否等于
n

因此,由于这一变化,代码最终被接受。谢谢


(发布,因为它可能对某人有所帮助)。另外,感谢
@user4581301
的提示,最终我找到了它。

为什么要投否决票?想解释一下吗?!对不起,“这是我的代码,请找出问题所在”这样的问题在StackOverflow上是离题的。据我所知,OP的问题在这个网站上是完全有效的。话虽如此,它可能被否决的一个原因是,定期使用调试器可能会解决这类问题,这通常是问题被否决的一个原因。此外,OP用
C++
Java
标记了他们的问题,这是一个很大的禁忌,除非你的问题涉及到这两种语言之间的互操作(这肯定不是)。@Xirema,谢谢。它触及灰色区域。但问题就是这样!此外,我还附有C++和java,因为代码是在这些语言中。我可以继续删除Java,我必须回到第二部分:绘制非常相似的时间曲线。你对被丢弃的系数的怀疑看起来更接近正确。当我运行测试代码时,我使用容易被整除的数字运行测试代码,这种相似性非常突出,但也会耗尽RAM。第三个想法是,我们真正想要的是计算大O时的最坏情况。最好的情况也是类似的。最糟糕的情况是我没有策划。
class Solution {
public:
    vector<vector<int>> getFactors(int n) {
        if(n==0 || n==1) return vector<vector<int>>();

        vector<vector<int>> result;
        vector<int> factors;
        getFactorsUtil(result, factors, n, 2);

        return result;
    }

    void getFactorsUtil(vector<vector<int>>& result, vector<int>& factors, int n, int start) {
        long int each=1;
        for(int i=0; i<factors.size(); i++)
            each = each*factors[i];
        if(each==n) result.push_back(factors);
        if(each>n) return;

        for(int i=start; i<=n; i++) {
            if(n%i==0) {        //perfectly divisible
                factors.push_back(i);
                getFactorsUtil(result, factors, n, i);
                factors.pop_back();
            }
        }
    }
};
public List<List<Integer>> getFactors(int n) {
    List<List<Integer>> result = new ArrayList<List<Integer>>();
    helper(result, new ArrayList<Integer>(), n, 2);
    return result;
}

public void helper(List<List<Integer>> result, List<Integer> item, int n, int start){
    if (n <= 1) {
        if (item.size() > 1) {
            result.add(new ArrayList<Integer>(item));
        }
        return;
    }

    for (int i = start; i <= n; ++i) {
        if (n % i == 0) {
            item.add(i);
            helper(result, item, n/i, i);
            item.remove(item.size()-1);
        }
    }
}