码迷,mamicode.com
首页 > 其他好文 > 详细

和为S的两个数字

时间:2014-05-20 08:19:22      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   c   code   java   

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

菜鸟的写法是顺序扫描,时间复杂度是O(n2)。下面给出一种大牛的写法,时间复杂度只需O(n)。

bubuko.com,布布扣
 1 //////////////////////和为S的两个数字//////////////////////////////////
 2 
 3 bool FindNumbersWithSum(int* data , int length , int sum)
 4 {
 5     if (data == NULL || length < 2)
 6     {
 7         return false ;
 8     }
 9     int begin = 0 ;
10     int end = length - 1 ;
11     while (begin < end)
12     {
13         long long CurSum = data[begin] + data[end];
14         if (CurSum == sum)
15         {
16             cout<<data[begin]<<"+"<<data[end]<<endl;
17             return true ;
18         }
19         else if (CurSum > sum)//当前和大于 sum ,end指针向后走一位
20         {
21             end--;
22         }
23         else //当前和小于 sum ,begin指针向前走一位
24         {
25             begin++;
26         }
27     }
28     return false ;
29 }
bubuko.com,布布扣

 

和为S的两个数字,布布扣,bubuko.com

和为S的两个数字

标签:style   blog   class   c   code   java   

原文地址:http://www.cnblogs.com/csxcode/p/3737891.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!