題目描述:
給定一個整形數組a[n],求該數組中任意n-1個元素的乘積的最大值,要求不允許用除法,時間復雜度O(n),空間復雜度O(1)。
思路:求出數組中的最大負數和最小正數,然後把其他數的乘起來,如果乘積是負數,則乘以最大負數,如果乘積是正數,則乘以最小正數。
[cpp]
#define MAX 0x7FFFFFFF
int maxMulit(int *a ,int n){
if(a==NULL||n<=0) return 0;
int minp =0,minn =0,maxsum = 1, max = -MAX,min = MAX;
//獲得最小正數和最大負數的下標
for(int i = 0 ;i< n; ++i){
if(a[i]>= 0&& a[i]<min) {
minp = i;
min = a[i];
}
else if(a[i]< 0&&a[i] > max){
minn = i;
max = a[i];
}
}
for(int i = 0 ; i< n ; i++){
if(i !=minn&&i !=minp){
maxsum *= a[i];
}
}
if(maxsum>0) maxsum *= a[minp];
else maxsum *= a[minp];
return maxsum;
}
#define MAX 0x7FFFFFFF
int maxMulit(int *a ,int n){
if(a==NULL||n<=0) return 0;
int minp =0,minn =0,maxsum = 1, max = -MAX,min = MAX;
//獲得最小正數和最大負數的下標
for(int i = 0 ;i< n; ++i){
if(a[i]>= 0&& a[i]<min) {
minp = i;
min = a[i];
}
else if(a[i]< 0&&a[i] > max){
minn = i;
max = a[i];
}
}
for(int i = 0 ; i< n ; i++){
if(i !=minn&&i !=minp){
maxsum *= a[i];
}
}
if(maxsum>0) maxsum *= a[minp];
else maxsum *= a[minp];
return maxsum;
}