输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好等于输入的那个数字。
要求时间复杂度是O(n)。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
要求时间复杂度是O(n)。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
solution:题目主要难度在于时间复杂度限制在O(n)内,即最多遍历一遍,即求得解。
想法如下:假设数据元素为a1, a2, ...ai, aj ...an ,可知a1<a2<ai<aj<an (i<j)。输入数字为m
如果ai + aj ==m( 1<=i<=j<=n),则找到对应的两个数为ai,aj, 如果ai+aj<m 则只能向右移动i,向左移动i显然不行
如果ai+aj>m 则只能向左移动j,如果 i>=j 则可证明无此样的两个数。
如果数组是未排序的,暂时还没想到解决办法,因为排序最快的速度也得o(nlogn),难道基数排序吗