程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 求數組中任意n-1個元素的最大乘積

求數組中任意n-1個元素的最大乘積

編輯:C++入門知識

題目描述:

給定一個整形數組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;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved