Leetcode —— Two Sum
Problem description link Two Sum
Analyse:
(1)O(nlogn)。排序,然后两个指针一前一后。因为题中说明了只有一对答案,因此不需要考虑重复的情况。
Submitted Code*(python)*:
from copy import deepcopy
class Solution:
# @param {integer[]} nums
# @param {integer} target
# @return {integer[]}
def twoSum(self, nums, target):
positionRecord = deepcopy(nums)
nums.sort()
a, b = self.findSuitableIndices(nums, 0, len(nums)-1, target)
while(nums[a] + nums[b] != target):
a ,b = self.findSuitableIndices(nums, a+1, b, target)
indexa = 0
indexb = len(nums)-1
while(positionRecord[indexa] != nums[a]):
indexa += 1;
while(positionRecord[indexb] != nums[b]):
indexb -= 1;
if indexa <= indexb:
return (indexa+1, indexb+1)
return (indexb+1, indexa+1)
def findSuitableIndices(self, nums, a, b, target):
for i in range(b, a, -1):
if nums[a] + nums[i] == target:
return (a, i)
if nums[a] + nums[i] < target:
return (a, i)
Runtime: 93ms
(2)O(n)。哈希表。将每个数字放在map中,历遍数组,如果出现和数组中的某一个值相加为target的时候,break。这个方法同样适用于多组解的情况。
Submitted Code*(python)*:
class Solution:
# @param {integer[]} nums
# @param {integer} target
# @return {integer[]}
def twoSum(self, num, target):
processed = {}
for i in range(0, len(num)):
if target-num[i] in processed:
return [processed[target-num[i]]+1,i+1]
processed[num[i]]=i
Runtime: 63ms