求乘积最大组
长度为n的整形数组,找出其中任意n-1个乘积最大的那一组,只能用乘法,不可以用除法。要求对算法时间复杂度和空间复杂度进行分析。
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <limits.h> int ret1Index(const int myArray[], const int n) //返回1个不包含在n-1个因子乘积最大组合中的因子下标 { int negNum = 0;//负数个数 for (int i = 0; i < n; i++) { if (myArray[i] < 0) { negNum++; } } int index = -1; switch(negNum % 2) { case 0: { int myNum = INT_MAX; for (int i = 1; i < n; i++) { if (myArray[i] >= 0 && myArray[i] <= myNum) { index = i; myNum = myArray[i]; } } return index; } case 1: { int myNum = 0; for (int i = 0; i < n; i++) { if (myArray[i] < 0 && abs(myArray[i]) > abs(myNum)) { index = i; myNum = myArray[i]; } } return index; } default: { return index; } } } void main() { const int n=6;//数组长度 const int myArray[n] = {-3,-2 , -1, 0, 2, 3}; int retId = -1; long multiply = 1; retId = ret1Index(myArray,n); if (-1 == retId) { printf("There must be some errors in your array!\n"); } else { //输出乘积最大组合 for (int i = 0; i < n; i++) { if (i != retId) { multiply *= myArray[i]; printf("%d ",myArray[i]); } } //输出最大乘积 printf("\n%ld\n",multiply); } system("pause"); return; }
时间复杂度为n,空间复杂度为常数C。