2017-8-31 python two sum 问题

题目描述:

来自LeetCode

1
2
3
4
5
6
7
8
9
10
11
12
13
# Time:  O(n)
# Space: O(n)

# Given an array of integers, return indices of the two numbers
# such that they add up to a specific target.
#
# You may assume that each input would have exactly one solution.
#
# Example:
# Given nums = [2, 7, 11, 15], target = 9,
#
# Because nums[0] + nums[1] = 2 + 7 = 9,
# return [0, 1].

Python 解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
lookup = {}
for i, num in enumerate(nums):
if target - num in lookup:
return [lookup[target - num], i]
lookup[num] = i
return []

def twoSum2(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
k = 0
for i in nums:
j = target - i
k += 1
tmp_nums = nums[k:]
if j in tmp_nums:
return [k - 1, tmp_nums.index(j) + k]


if __name__ == '__main__':
print Solution().twoSum((2, 7, 11, 15), 9)

# -*- coding: utf-8 -*-
import time
def main(a, b):
# med = a[int(len(a)/2)]
c=[-1, -1]
for i, v in enumerate(a):
for j,k in enumerate(a[i+1:]):
c = [i, i+j+1] if v+k==b else c
return c

def main2(a, b):
"""
dict 存放查值
"""
c = {}
for i in range(len(a)):
if b - a[i] in c:
return [c[b-a[i]], i]
c[a[i]] = i
return [-1, -1]

def sum_number(a, b):
"""
dict 存放差值
"""
if len(a) <= 1:
return False
c = {}
for i in range(len(a)):
if a[i] in c:
return [c[a[i]], i]
else:
c[b - a[i]] = i
return [-1, -1]

def main3(a, b):
for i in range(len(a)):
if (b - a[len(a)-i-1]) in a[:len(a)-i-1]:
return [a.index((b - a[len(a)-i-1])),len(a)-i-1]
return [-1, -1]

def main4(a, b):
try:
# print [[a.index((b - a[len(a)-i-1])),len(a)-i-1] for i in range(len(a)) if (b - a[len(a)-i-1]) in a[:len(a)-i-1]]
return [[a.index((b - a[len(a)-i-1])),len(a)-i-1] for i in range(len(a)) if (b - a[len(a)-i-1]) in a[:len(a)-i-1]][0]
except:
return [-1,-1]

def main5(a, b):
return [[a.index((b - a[len(a)-i-1])),len(a)-i-1] for i in range(len(a)) if (b - a[len(a)-i-1]) in a[:len(a)-i-1]].pop()

def main6(a, b):
return [[a.index(b-j), i] for i,j in enumerate(a) if a.count(b-j) > 0 and a.index(b-j)!=i].pop()

if __name__ == '__main__':
a = range(20)
b = 18
# a = [49,1,2,3,50,51]
# b=99
print 'list:{},data:{}'.format(a,b)
start = time.time()
print main(a,b)
print 'main_time_used:{}'.format(time.time()-start)
start = time.time()
print main2(a,b)
print 'main2_time_used:{}'.format(time.time()-start)
start = time.time()
print main3(a,b)
print 'main3_time_used:{}'.format(time.time()-start)
start = time.time()
print main4(a,b)
print 'main4_time_used:{}'.format(time.time()-start)
start = time.time()
print main5(a,b)
print 'main5_time_used:{}'.format(time.time()-start)
start = time.time()
print main6(a,b)
print 'main6_time_used:{}'.format(time.time()-start)
支持小徐?賞一賞!