轉自:在由N個正整數的集合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
【代碼】
- /*********************************
- * 日期:2015-01-29
- * 作者:SJF0115
- * 題目: 在由N個正整數的集合S中,找出最大元素C,滿足C=A+B,其中A,B都是集合S中的元素
- * 來源:百度
- * 博客:
- **********************************/
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int FindSum(int A[],int n){
- // 排序
- sort(A,A+n);
- int left,right,sum;
- // i = C
- for(int i = n - 1;i >= 2;--i){
- left = 0,right = i - 1;
- // 判斷是否有A + B = i
- while(left < right){
- sum = A[left] + A[right];
- if(sum == A[i]){
- return A[i];
- }//if
- else if(sum > A[i]){
- --right;
- }
- else{
- ++left;
- }
- }//while
- }//for
- return -1;
- }
- int main(){
- int A[] = {5,7,3,0,9,11,8,13,100};
- int n = 9;
- cout<<FindSum(A,n)<<endl;;
- return 0;
- }