数组求和相关算法

来源:互联网 发布:冰川网络 300533 股吧 编辑:程序博客网 时间:2024/06/06 02:33

问题1、输入一个数组,在数组中查找两个数,使得它们的和正好是target

void FindTwoSum(int a[],int n,int target){    sort(a,a+n);    int sum=0;    int i=0;    int j=n-1;    while(i<j){        sum=a[i]+a[j];        if(sum==target){                cout<<a[i]<<"+"<<a[j]<<"="<<sum<<endl;                i++;                j--;        }        else if(sum<target){            i++;        }        else{            j--;        }    }}

问题2、输入整数sum,找出所有和为sum的连续整数序列,至少包含两个。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所有结果打印出三个连续的序列.

void Print(int small,int big){    for(int i=small;i<=big;i++){        cout<<i<<",";    }    cout<<endl;}void FindAllSequenceSum(int sum){    int s=0;    int small=1;    int big=2;    s=small+big;    while(small<sum/2){        if(s==sum)            Print(small,big);        while(s>sum&&small<=sum/2){            s-=small;            small++;            if(s==sum){                Print(small,big);            }        }        big++;        s+=big;    }}

问题3、求数组中最长递增子序列

int LongestAdvanceSub(int a[], int n){    int *f = new int[n];    int maxLen=1;    for (int i = 0; i<n; i++){        f[i]=1;        for (int j = 0; j < i; j++){            if (a[i]>a[j]&&f[j]+1>f[i])                f[i] = f[j]+1;            if (maxLen < f[i]){                maxLen = f[i];            }        }    }    return maxLen;}

问题3、数组分割。将元素个数为2n的数组分割为两个个数为n的数组并使得两个子数组的和最接近。

这里写代码片

问题4、数组中三个数字之和最接近target的组合

0 0
原创粉丝点击