在由N個正整數的集合S中,找出最大元素C,滿足C=A + B

轉自:在由N個正整數的集合S中....


【題目】

在由N個正整數的集合S中,找出最大元素C,滿足C=A + B 其中A,B都是集合S中元素,請給出算法描述,代碼與時間複雜度分析。

【分析】

1,對集合S進行排序(快排),從小到大排序
2,讓C指向集合最後一個元素(最大元素)
3,讓i指向S中第一個元素,讓j指向C的前一個元素
4,如果,A[i]+A[j]==C則return C;
5,如果if(A[i]+A[j]<C)則i++;
6,如果if(A[i]+A[j]>C)則j--;
7,直道i>=j依然沒有找到符合條件的元素,則C在S中向前移動一位,跳至步驟3

【代碼】

[cpp] view plain copy
  1. /********************************* 
  2. *   日期:2015-01-29 
  3. *   作者:SJF0115 
  4. *   題目: 在由N個正整數的集合S中,找出最大元素C,滿足C=A+B,其中A,B都是集合S中的元素 
  5. *   來源:百度 
  6. *   博客: 
  7. **********************************/  
  8. #include <iostream>  
  9. #include <algorithm>  
  10. using namespace std;  
  11.   
  12. int FindSum(int A[],int n){  
  13.     // 排序  
  14.     sort(A,A+n);  
  15.     int left,right,sum;  
  16.     // i = C  
  17.     for(int i = n - 1;i >= 2;--i){  
  18.         left = 0,right = i - 1;  
  19.         // 判斷是否有A + B = i  
  20.         while(left < right){  
  21.             sum = A[left] + A[right];  
  22.             if(sum == A[i]){  
  23.                 return A[i];  
  24.             }//if  
  25.             else if(sum > A[i]){  
  26.                 --right;  
  27.             }  
  28.             else{  
  29.                 ++left;  
  30.             }  
  31.         }//while  
  32.     }//for  
  33.     return -1;  
  34. }  
  35.   
  36. int main(){  
  37.     int A[] = {5,7,3,0,9,11,8,13,100};  
  38.     int n = 9;  
  39.     cout<<FindSum(A,n)<<endl;;  
  40.     return 0;  
  41. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章