两个数的和
在给定的一些数字中找出两个数,使得他们的和为N,前提是数据中保证有答案,并且只有一个答案。例如给定5个数字:3,4,5,7,10,从中选择两个数使他们的和为11,可以选择4和7,如何解决这个问题?
第一种求和方法
先将数组从小到大排序,排序时需要把数据复制到一个新的数组中,然后对新的数组进行排序。
数组排序后,可以开始查找了。建立两个指针left和right,分别指向新数组的第一个元素和最后一个元素。如果俩个指针的两个数据相加的和等于目标值,那么查找结束,返回这两个数的下标,如果他们的和小于目标值,则说明left指向的数据太小了,需要让left指针向右移动一位;如果他们的和大于目标值,则说明right指向的数据太大了,需要让right指针向左移动一位。重复这个过程,直到找到答案。
源代码:
#方法1
def twoSum(nums, target):
res = [] #存放结果编号数据
newnums = nums[:] #深拷贝,把源数据复制到newnums里
newnums.sort() #对新数组排序
left = 0
right = len(newnums) - 1#定义left和right指针分别指向新数组的开头和结尾
while left < right:
if newnums[left]