数组求和相关算法

  • Post author:
  • Post category:其他


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



版权声明:本文为southernriver原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。