目录
一、For循环嵌套
这绝对是最呆的方法,外层循环加内层循环,如果两者下标不同就输出。耗时9382ms
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
result = []
for m in range(0, len(nums)):
if len(result):
break
for n in range(0, len(nums)):
if nums[m] + nums[n] == target and m != n:
result.append(m)
result.append(n)
break
return result
二、使用临时数组
同样使用for循环指定num_1,然而,为了防止num_1干扰num_2的查找,我们新建临时数组并扣去num_1并赋值为None,再在新临时数组中查找num_2,最后输出两个下标。耗时1392ms
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
result = []
for i in range(len(nums)):
temp = nums[:]
temp[i] = None
if target - nums[i] in temp:
result.append(i)
result.append(temp.index(target - nums[i]))
break
return result
三、数组分片查找
当我们从开头进行num_1的确定时,num_2肯定会在num_1之后(如果在前的话前几次就已经被找出来了),那我们便可以从num_1往后的分片中进行查找。耗时676ms
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
lens = len(nums)
result = []
for i in range(lens):
if (target - nums[i]) in nums[i+1:]:
index_2 = nums[i+1:].index(target - nums[i]) + i + 1
result.append(i)
result.append(index_2)
break
return result
四、字典查找
我的理解是使用enumerate()和空字典hashmap{}对nums[]进行字典化的处理,之后只需对值进行配对,那么键就是所需要的答案。耗时89ms
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashmap = {}
for i, num in enumerate(nums):
if hashmap.get(target - num) is not None:
return [i, hashmap.get(target - num)]
hashmap[num ] = i