数组求和相关算法

问题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的组合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值