C++程序 最小乘积子集
给定一个数组a,我们必须找到该数组中元素子集的最小乘积。最小乘积也可以是单个元素。
例子:
输入: a[] = { -1, -1, -2, 4, 3 }
输出: -24
解释: 最小乘积为( -2 * -1 * -1 * 4 * 3 ) = -24
输入: a[] = { -1, 0 }
输出: -1
解释: -1(单个元素)是最小乘积
输入: a[] = { 0, 0, 0 }
输出: 0
一个简单的解决方案是生成所有子集,找到每个子集的乘积并返回最小乘积。
更好的解决方案是使用以下事实。
- 如果负数的数量为偶数且没有零,则结果是减去所有负数中的最大值。
- 如果负数的数量为奇数且没有零,则结果就是所有数字的乘积。
- 如果有零且所有数字都是正数,则结果为0。当没有负数并且所有其他数字都是正数时,我们的结果应为第一个最小的正数。
输出:
时间复杂度: O(n)
辅助空间: O(1)