题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和为s,输出任意一对即可。

 vector<int> findNumberwWithSum(vector<int>&data, int sum)
{
int n = data.size();
vector<int>result;
if (n < )
return result;
int left = , right = n-;
while (left < right)
{
if (data[left]+data[right] == sum)
{
result.push_back(data[left]);
result.push_back(data[right]);
break;
}
else if (data[left]+data[right] < sum)
++left;
else
--right;
}
return result;
}

题目二:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5 = 4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6、7~8.

分析:有了解决前面问题的经验,我们也考虑用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1,big初始化为2.如果从

small到big的序列的和大于s,我们可以从序列中去掉较小的值,也就是增大small的值。如果从small到big的序列的和小于s,我们可以增大

big,让这个序列包含更多的数字。因为这个序列至少要两个数字,我们一直增加small到(1+s)/2为止。

void findContinuousSequence (int sum)
{
if (sum < )
return ;
int small = ;
int big = ;
int middle = ( + sum) /;
int curSum = small + big;
while (small < middle)
{
if (curSum == sum)
{
for (int i = small; i <= big; ++i)
cout << i ;
big++;
curSum+=big;
}
else if (curSum > sum)
{
curSum-=small;
small++;
}
else
{
big++;
curSum+=big;
}
}
}

最新文章

  1. Linux and symmetric multiprocessing
  2. 初学Vue2.0--基础篇
  3. &lt;Oracle Database&gt;后台进程
  4. 十步图解CSS的position
  5. javaweb学习总结(二十)——JavaBean总结
  6. 使用aop记录数据库操作的执行时间
  7. ConfigurationManager.GetSection()方法的使用
  8. 生产项目加入到SVN版本控制
  9. 解决使用 Composer 的时候提示输入 Token
  10. FineUI初学手册-部分JS整理
  11. C++部分术语(Terms)
  12. Swift - .plist文件数据的读取和存储
  13. LeetCode OJ 42. Trapping Rain Water
  14. cakephp2.3.0 lib中的Model.php有一个bug
  15. 【JAVAWEB学习笔记】网上商城实战3:购物模块和订单模块
  16. 整合spring+mybatis遇到的问题01
  17. SpringCloud学习笔记(7)——Sleuth
  18. 线性表概述及单链表的Java实现
  19. Three.js学习笔记04--纹理
  20. 如何看待Google欲回归中国事件

热门文章

  1. 006-搭建框架-实现AOP机制【三】AOP技术
  2. Django:popup弹出框简单应用实例
  3. 编译安装 nginx的http_stub_status_module监控其运行状态
  4. Spring:笔记整理(2)——IOC容器
  5. PHP 实现Session入库/存入redis
  6. asp.net,缓存Cache
  7. UI控件之UINavigationController
  8. [转载]OpenWRT使用wifidog实现强制认证的WIFI热点 | 半个橙子
  9. jQuery仿苹果样式焦点图插件
  10. java 程序的使用