【C++】在由N个正整数的集合S中,找出最大元素C,满足C=A + B 其中A,B都是集合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

参考代码

#include 
#include 
using namespace std;

void FindSum(int A[],int n){
    // 排序
    sort(A,A+n);
    int flase = 0;
    int left,right,sum;
    // A[i] = C
    for(int i = n - 1;i >= 2;--i){
        left = 0,right = i-1 ;
        // 判断是否有A + B = C
        while(left < right){
            sum = A[left] + A[right];
            if(sum == A[i]){
                printf("%d  ");
                flase = 1;
                break;
            } 
            else if(sum > A[i]){
                --right;
            }
            else{
                ++left;
            }
        }
    }
    if(flase == 0)
    {
        printf("无元素符合 \n");
    }
}

int main(){
    int A[] = {5,7,3,0,9,11,8,13,100};
    int n = 9;
    FindSum(A,n);
    return 0;
}

效果图

【C++】在由N个正整数的集合S中,找出最大元素C,满足C=A + B 其中A,B都是集合S中元素_第1张图片

你可能感兴趣的:(C++题集与小项目)