長度爲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。