[Lintcode two-sum]两数之和(python,双指针)

题目链接:http://www.lintcode.com/zh-cn/problem/two-sum/

给一个整数数组,找到两个数使得他们的和等于一个给定的数target

备份一份,然后排序。搞两个指针分别从左从右开始扫描,每次判断这两个数相加是不是符合题意,如果小了,那就把左边的指针向右移,同理右指针。然后在备份的数组里找到位置。

 1 class Solution:
 2     """
 3     @param numbers : An array of Integer
 4     @param target : target = numbers[index1] + numbers[index2]
 5     @return : [index1 + 1, index2 + 1] (index1 < index2)
 6     """
 7     def twoSum(self, numbers, target):
 8         # write your code here
 9         tmp = []
10         for i in numbers:
11             tmp.append(i)
12         numbers = sorted(numbers)
13         a = 0
14         b = len(numbers) - 1
15         while True:
16             if numbers[a] + numbers[b] == target:
17                 break
18             elif numbers[a] + numbers[b] < target:
19                 a += 1
20             elif numbers[a] + numbers[b] > target:
21                 b -= 1
22         reta = numbers[a]
23         retb = numbers[b]
24         a = -1
25         b = -1
26         for i in range(0, len(tmp)):
27             if tmp[i] == reta and a == -1:
28                 a = i
29             elif tmp[i] == retb and b == -1:
30                 b = i
31         if a > b:
32             a = a ^ b
33             b = a ^ b
34             a = a ^ b
35         return [a+1, b+1]

 

转载于:https://www.cnblogs.com/kirai/p/5597144.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值