在由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. }  

猜你喜欢

转载自blog.csdn.net/qq_18433441/article/details/78276203