您的位置:首页 > 其它

41-所有和为s的连续正数序列/递增数列中和为s的两个数字

2017-07-20 20:17 399 查看
这里用到一个等差数列公式:

     Sum=(small+big)n/2;


所有和为s的连续正数序列:

vector<vector<int> > FindContinuousSequence(int sum)
{
vector<int>  v;
vector<vector<int> > vv;
if (sum < 3) return vv;
int small = 1;
int big =  2;

int n = 2;
while (small<(sum+1)/2)   //注意结束条件 因为必须起码俩数,最小的要是大于和的一半了,再往后也没啥用
{
if((small + big)*n / 2 < sum)
{
n++;
big++;
}
else if ((small + big)*n / 2 > sum)
{
n--;
small++;
}
else
{

for (int i = small; i <= big;i++)
{
v.push_back(i);
}
vv.push_back(v);
v.clear();
big++;
n++;

}
}
return vv;

}

递增数列中和为s的两个数字:

vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> v;
if (sum <=0) return v;
int small = 0;

int big = array.size()-1;

while (small<big)
{
if (array[small] + array[big]<sum)
{
small++;
}
else if (array[small] + array[big] > sum)
{
big--;
}
else
{
v.push_back(array[small]);
v.push_back(array[big]);
break;
}
}
return v;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐