41-所有和为s的连续正数序列/递增数列中和为s的两个数字
2017-07-20 20:17
399 查看
这里用到一个等差数列公式:
Sum=(small+big)n/2;
所有和为s的连续正数序列:
递增数列中和为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;
}
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;
}
相关文章推荐
- 和为n连续正数序列 & 排序数组中和为给定值的两个数字
- 剑指offer 41 - 和为s的两个数字VS为s的连续正数序列
- 剑指offer-面试题41-和为s的两个数字VS和为s的连续正数序列
- 剑指offer——面试题41:和为s的两个数字VS和为s的连续正数序列
- 面试题41和为S的两个数字VS和为s的连续正数序列
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 面试题41:和为s的两个数字,和为s的连续正数序列
- 【剑指offer】6.3知识迁移能力——面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer 面试题41 和为 s 的两个数字 VS 和为 s 的连续正数序列
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指Offer_面试题41_和为s的两个数字 VS 和为s的连续正数序列
- 剑指offer 面试题41 递增数组中和为s的两个数字 | 和为s的连续整数序列
- 剑指Offer-面试题41-和为s 的两个数字vs 和为s 的连续正数序列
- 《剑指Offer》学习笔记--面试题41:和为s的两个数字VS和为s的连续正数序列
- 【剑指Offer学习】【面试题41:和为s 的两个数字vs 和为s 的连续正数序列】
- [剑指offer][面试题41]和为s的两个数字 VS 和为s的连续正数序列
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 递增数列中和为s的两个数字,和为s的连续正数序列
- 剑指offer 面试题41—和为s的两个数字VS和为s的连续正数序列