其实这个题目如果没有限制时间复杂度的话,那么就很简单了,一遍一遍地扫描吧。时间复杂度肯定就是
O(n2)啰。但是这题目肯定不会这么简单,否则就是小学生的水平了嘛。
其实我刚到这题的时候想到的是用二叉查找的方法进行。但是可能有点困难。
书上提供的方法固然是很巧妙的。
我们要抓住题目中数组的特点,是排好序的。
我们先定义两个指针。一个指头,一个指尾。

我们来计算start+end=16>15。于是知大了,咋办?
我们将end往后移一位。也就是如下了:

些时 1+11=12<15..咋办?
肯定是将start往后移一位啊。

2+11=13<15还是小了

正好嘛。4+11=15..于是,找到了这个值。


  1. void findTwoDataSumed(int *arr,int Length,int v_sum,int *num1,int *num2){
  2. if(arr==NULL||Length==0){
  3. return;
  4. }
  5. int first=0;
  6. int last=Length-1;
  7. while(first<last){
  8. if(arr[first]+arr[last]>v_sum){
  9. last--;
  10. }
  11. if(arr[first]+arr[last]<v_sum){
  12. first++;
  13. }
  14. if(arr[first]+arr[last]==v_sum){
  15. *num1=arr[first];
  16. *num2=arr[last];
  17. return;
  18. }
  19. }
  20. }

这个题目肯定得用到上面的思想了。
其实我第一眼看到这个题目的时候思路是:
输入15吧。 15/1=15 。要两个数才行。
15/2=8.。那么8是这两个数的平均大小(准确地说是7.5)。于是知我们找到8和7。因为它们不仅连续,而且平均数是7.5.OK
15/3=5.   要求平均数是5哦。肯定是3、4、5不行,5、6、7也不行。4、5、6正好嘛。
15/4=3.75。好复杂的数字。于是我们想。四个数的平均数是3.75.   没有
15/5=3. 正好是1-5
后面的数其本不可能了的,。
你想。15/6=平均数太小了。不存在这样的连续数字。15/7.就更不可能了。

而这个算法的思路是:
    
  1. void findContinueSequenceSum(int v_sum){
  2. if(v_sum<3){
  3. return;
  4. }
  5. int start=1;
  6. int end=2;
  7. int curSum=start+end;
  8. int mid=(v_sum+1)/2;
  9. while(start<mid){
  10. if(curSum==v_sum){
  11. printSeqNum(start,end);
  12. }
  13. if(curSum>v_sum&&start<mid){
  14. curSum-=start;
  15. start++;
  16. if(curSum==v_sum){
  17. printSeqNum(start,end);
  18. }
  19. }
  20. if(curSum<=v_sum&&start<mid){
  21. end++;
  22. curSum+=end;
  23. }
  24. }
  25. }
  26. void printSeqNum(int start,int end){
  27. for(int i=start; i<end; i++){
  28. std::cout<<start<<",";
  29. }
  30. std::cout<<end;
  31. }


和为S的两个数VS和为S的连续正数序列的更多相关文章

  1. 面试题41:和为s的两个数字 || 和为s的连续正数序列

    和为s的两个数字 题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 有点类似于夹逼的思想 注意两个int相加的和要用lo ...

  2. 和为s的两个数字 和为s的连续正数序列

    输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s,如果有多对数字的和等于s,输出任意一对即可. #include <iostream> using namesp ...

  3. 和为S的两个数字VS和为s的连续正数序列

    题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 例如输入数组1.2.4.7.11.15和数字15.由于4+11=15, ...

  4. 【面试题041】和为s的两个数字VS和为s的连续正数序列

    [面试题041]和为s的两个数字VS和为s的连续正数序列 题目一:     输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. ...

  5. 【剑指offer】面试题41:和为 s 的两个数字 VS 和为 s 的连续正数序列

    题目: 输出所有和为S的连续正数序列.序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 思路: small代表序列最小数字,large代表序列最大数字.初始化small为1,large为2. ...

  6. 和为 s 的两个数字(和为 s 的连续正数序列)

    题目 输入一个递增排序的数组和一个数字 s,在数组中查找两个数,得它们的和正好是 s.如果有多对数字的和等于 s,输出任意一对即可 思路 我们先在数组中选择两个数字,如果它们的和等于输入的 s,我们就 ...

  7. 面试题41:和为s的两个数字VS和为s的连续正数序列

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

  8. [剑指Offer]41.和为S的两个数字 VS 和为S的连续正数序列

    [剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列 Leetcode T1 Two Sum Given an array of integers, return indices of ...

  9. 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

随机推荐

  1. Python3基础 count 返回指定元素在列表中的个数

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  2. 【转载】ADO,OLEDB,ODBC,DAO的区别

    原文:ADO,OLEDB,ODBC,DAO的区别 ODBC(Open Database Connectivity,开放数据库互连) 1992年,微软公司开放服务结构(WOSA,Windows Open ...

  3. css选择器选择顺序是从右往左的,为什么?

    https://segmentfault.com/q/1010000000713509 为什么 CSS 选择器解析的时候是从右往左? CSS 的后代选择器本身就是一种在标准里面不那么推荐的方式. 首先 ...

  4. PigSPS: a database for pig SNPs and signatures of positive selection

    URL: http://www.ibiomedical.net/pigsps/ keywords: pig, boar, SNP, positive selection, database, db, ...

  5. [HDOJ5943]Kingdom of Obsession(最大匹配,思路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:n个人编号为[s+1,s+n],有n个座位编号为[1,n],编号为i的人只能坐到编号为它的 ...

  6. NPO与X7R、X5R、Y5V、Z5U神马的有啥区别

    主要是介质材料不同.不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率亦不一样. 在相同的体积下的容量就不同,随之带来的电容器的介质损耗.容量稳定性等也就不同.介质材料划按容量的温 ...

  7. Java Web表达式注入

    原文:http://netsecurity.51cto.com/art/201407/444548.htm 0×00 引言 在2014年6月18日@终极修炼师曾发布这样一条微博: 链接的内容是一个名为 ...

  8. Base64加密解密原理以及代码实现(VC++)

    Base64加密解密原理以及代码实现 转自:http://blog.csdn.net/jacky_dai/article/details/4698461 1. Base64使用A--Z,a--z,0- ...

  9. 《Redis设计与实现》读书笔记

    <Redis设计与实现>读书笔记 很喜欢这本书的创作过程,以开源的方式,托管到Git上进行创作: 作者通读了Redis源码,并分享了详细的带注释的源码,让学习Redis的朋友轻松不少: 阅 ...

  10. CSS笔记(十三)CSS3之过渡

    参考:http://www.w3school.com.cn/css3/css3_transition.asp 通过 CSS3,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元 ...