题目:长度为n的整数数组,找出其中任意(n-1)个乘积最大的那一组的乘积,只能用乘法,不可以用除法。要求对算法的时间复杂度和空间复杂度作出分析,不要求写程序.
既然题目不要求写程序,那我也不写了,就整理一下思路吧。可以按照下面几种情况考虑:
1. 如果数组中有2个以上的0存在,那无论如何组合,最后的结果都是0;
2. 如果有1个0,奇数个负数,那结果也是0;
3. 如果有1个0,偶数个负数,那结果是除0外的数据组合;
4. 如果没有0,偶数个负数,那将最小的整数排除,其余的组合;
5. 如果没有0,奇数个负数,将最大的负数(绝对值最小)排除,其余的组合;
开始要扫描一遍数组,统计0和负数的个数;其余操作最好时常数时间完成,最坏是O(n)的,最后结果就是时间复杂度为O(n),空间复杂度为O(1)。
既然题目不要求写程序,那我也不写了,就整理一下思路吧。可以按照下面几种情况考虑:
1. 如果数组中有2个以上的0存在,那无论如何组合,最后的结果都是0;
2. 如果有1个0,奇数个负数,那结果也是0;
3. 如果有1个0,偶数个负数,那结果是除0外的数据组合;
4. 如果没有0,偶数个负数,那将最小的整数排除,其余的组合;
5. 如果没有0,奇数个负数,将最大的负数(绝对值最小)排除,其余的组合;
开始要扫描一遍数组,统计0和负数的个数;其余操作最好时常数时间完成,最坏是O(n)的,最后结果就是时间复杂度为O(n),空间复杂度为O(1)。