首页 > 代码库 > 和为S的两个数字
和为S的两个数字
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。
菜鸟的写法是顺序扫描,时间复杂度是O(n2)。下面给出一种大牛的写法,时间复杂度只需O(n)。
1 //////////////////////和为S的两个数字////////////////////////////////// 2 3 bool FindNumbersWithSum(int* data , int length , int sum) 4 { 5 if (data =http://www.mamicode.com/= 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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。