用hash表存储所有值,存储。然后遍历数组,用target-当前位置的值并在hash表中判断是不是存在。
[3,3],6 : 注意数组中有重复元素的情况,后面的会覆盖前面的元素,所以从前到后,然后遍历hash表就行。
[3, 2, 4],6 : 这种情况,就需要判断当前下标与hash表中的索引是不是一样。如果一样 就证明一个元素用了两次
class Solution:
def __init__(self):
self.my_set = {}
def twoSum(self, nums, target: int):
# def twoSum(self, nums: List[int], target: int) -> List[int]:
self.my_set = dict(zip(nums, list(range(len(nums)))))
for i in range(len(nums)):
j = target - nums[i] # 2
if self.judge(j) and i != self.my_set[j]:
return [i, self.my_set[j]]
def judge(self, j):
if j in self.my_set:
return True
return False
# leetcode submit region end(Prohibit modification and deletion)
if __name__ == '__main__':
sol = Solution()
nums = [3, 2, 4]
tar = 6
print(sol.twoSum(nums, tar))
hashmap = {}
for i, j in enumerate(nums):
hashmap[j] = i
快速用nums 生成对应的 数组
dict(zip(nums, list(range(len(nums)))))
zip函数是将两个数组打包。list[range]可以生成列表