【问题标题】:Product Array Puzzle产品阵列拼图
【发布时间】:2021-10-14 22:08:42
【问题描述】:

问题:给你一个包含“N”个整数的数组。您需要返回另一个数组“product”,使得“product[i]”包含所有数组的乘积,但给定数组中第 i 个位置的元素除外。

注意: 由于元素的乘积可能非常大,您需要在 mod (10^9+7) 中返回答案。

我的代码

vector < int > productPuzzle(vector < int > & arr, int n) {
   
   vector<int> output;
   int product = 1;
    for(int i=0;i<n;i++){
        product*=arr[i];
        output.push_back(product);
    }
    product = 1;
    for(int i=n-1;i>0;i--){
        output[i] = output[i-1]*product;
        product *= arr[i];
    }
    output[0] =product;
    return output;
}

怀疑:我没有让所有的测试用例都通过。我认为问题在于处理大型产品。谁能帮助建议我应该进行哪些更改以通过所有测试用例?

【问题讨论】:

  • 你能举一个你没有通过的测试用例的例子吗?
  • n= 18 数组元素:41 60 11 19 38 58 32 10 33 48 86 33 74 16 42 84 59 17

标签: c++ arrays algorithm data-structures dsa


【解决方案1】:

每次计算乘法时都必须取模以防止溢出。

如果int 无法在取模之前存储产品,则还需要转换为 64 位(或更多)类型。

vector < int > productPuzzle(vector < int > & arr, int n) {
   const int MOD_BY = 1000000007;
   
   vector<int> output;
   int product = 1;
    for(int i=0;i<n;i++){
        product=(static_cast<long long>(product) * arr[i]) % MOD_BY;
        output.push_back(product);
    }
    product = 1;
    for(int i=n-1;i>0;i--){
        output[i] = (static_cast<long long>(output[i-1])*product) % MOD_BY;
        product = (static_cast<long long>(product) * arr[i]) % MOD_BY;
    }
    output[0] =product;
    return output;
}

【讨论】:

  • 您能否解释一下“static_cast”的工作原理以及它与 long long 有何不同?
猜你喜欢
  • 2017-08-21
  • 2022-01-12
  • 2013-12-12
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2020-06-22
  • 1970-01-01
相关资源
最近更新 更多