《剑指offer》刷题笔记(知识迁移能力):和为S的两个数字
2017-12-13 15:11
351 查看
《剑指offer》刷题笔记(知识迁移能力):和为S的两个数字
转载请注明作者和出处:http://blog.csdn.net/u011475210代码地址:https://github.com/WordZzzz/Note/tree/master/AtOffer
刷题平台:https://www.nowcoder.com/
题 库:剑指offer
编 者:WordZzzz
剑指offer刷题笔记知识迁移能力和为S的两个数字
题目描述
输出描述
解题思路
C版代码实现
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述
对应每个测试案例,输出两个数,小的先输出。解题思路
暴力的时间复杂度为O(n^2)。下面我们想一下时间复杂度为O(n)的算法。我们可以定义两个指针,一个从前往后遍历(ahead),另一个从后往前遍历(behind)。首先,我们比较第一个数字和最后一个数字的和curSum与给定数字sum,如果curSum < sum,那么我们就要加大输入值,所以,ahead向后移动一位,重复之前的计算;如果curSum > sum,那么我们就要减小输入值,所以,behind向前移动一位,重复之前的计算;如果相等,那么这两个数字就是我们要找的数字,直接输出即可。
C++版代码实现
class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int> result; int length = array.size(); if(length < 1) return result; int ahead = length-1; int behind = 0; int curSum; while(ahead > behind){ curSum = array[ahead] + array[behind]; if(curSum == sum){ result.push_back(array[behind]); result.push_back(array[ahead]); break; } else if(curSum < sum) ++behind; else --ahead; } return result; } };
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz
相关文章推荐
- 《剑指offer》刷题笔记(知识迁移能力):数组中只出现一次的数字
- 《剑指offer》刷题笔记(知识迁移能力):数字在排序数组中出现的次数
- 《剑指offer》刷题笔记(知识迁移能力):和为S的连续正数序列
- 《剑指offer》刷题笔记(知识迁移能力):翻转单词顺序列
- 《剑指offer》刷题笔记(知识迁移能力):左旋转字符串
- 知识迁移能力-和为S的两个数字
- (C++)剑指offer-42:和为S的两个数字(知识迁移能力)
- 剑指offer 41题【知识迁移能力】和为S的两个数字
- 《剑指offer》刷题笔记(知识迁移能力):平衡二叉树
- 《剑指offer》刷题笔记(知识迁移能力):二叉树的深度
- 【剑指Offer-知识迁移能力】有序数组中和为S的两个数字
- 【剑指offer】6.3知识迁移能力——面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer 6.3 知识迁移能力5-和为s的两个数字
- 剑指offer:(38)知识迁移 :数字在排序数组中出现的次数
- 剑指offer 38题 【知识迁移能力】数字在排序数组中出现的次数
- 剑指offer 42题 【知识迁移能力】翻转单词顺序列
- 【剑指Offer-知识迁移能力】统计一个数字在排序数组中出现的次数。
- 知识迁移能力-面试题37-两个链表的第一个公共结点
- 平衡二叉树(剑指offer)知识迁移能力
- 剑指offer 算法 (知识迁移能力2)