【发布时间】:2020-02-09 14:20:22
【问题描述】:
在一个由整数(负数、正数和零)组成的数组中
任务是找到 Total Number of subarrays 其乘积为 Negative 。
如果我找到所有子数组然后检查负积,它将进入 O(n^2)。
long long n,a[200001],i,neg[200001],j; long long totalneg=0; //前缀数组存储负元素的数量 辛>>n; a[0]=0,负[0]=0; for(i=1;i>a[i]; 如果(a[i]那么我怎样才能在 O(n) 时间内找到它。
【问题讨论】:
-
请向我们展示您目前拥有的代码。
-
我不知道在这种情况下你会有什么时间复杂度,但你可以:1)获取数组大小(比如说
n); 2) 找出所有负值; 3)让我们进入算法......如果你有奇数个负值,那么你肯定有一个负积,这与正值的数量无关。因此,您必须使用所有正值的组合以及负数的所有可能奇数乘法的组合。 -
恐怕 Stackoverflow 不是家庭作业写作服务。向我们展示你做了什么,解释什么是不工作的,我们也许可以解决它。如果有帮助,如果数组有奇数个负数,它就会有一个负积?
-
两个观察结果:(1)您的天真解决方案是 O(n^3),而不是 O(n^2) [您忘记了计算产品的成本]; (2) 思考动态规划。
-
此外,如果你能写出时间复杂度为 O(n^2) 的解决方案,那就太好了。