给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
-
暴力法,直接使用暴力的迭代方法遍历出来。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
result = []
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i]+nums[j]:
result.extend([i,j])
return result
2、思路得益于二分查找法,坑点在于当数组中有两个相同的数就不能用Index来判断下标了。
def twoSumTest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
r = []
num_copy = copy.deepcopy(nums)
nums.sort()
j = len(nums)-1
i = 0;
while i<j:
if nums[i]+nums[j] > target:
j -= 1
continue
elif nums[i]+nums[j] < target:
i += 1
continue
else:
a = num_copy.index(nums[i])
b = num_copy.index(nums[j])
if nums[i] == nums[j]: #防止两个数相同
num_copy.remove(nums[i])
b = num_copy.index(nums[j])
b = b+1
r.extend([a, b])
return r