问题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 版权协议,转载请附上原文出处链接和本声明。