leetcode_两数之和_python3

问题出处:两数之和

题目描述

给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解题思路

  1. 比较笨的方法,两个for循环直接遍历
    遍历两边数组即可,如果有两个数等于target,则返回两个这两个数的索引
class Solution():
    def twoSum(self, nums, target):
        for i in range(len(nums)):
            for j in range(i+1, len(nums)):
                if target-nums[i] == nums[j]:
                    return [i, j]
  1. 一个for循环,直接判断target-nums[i]是否在nums里,不过要判断两个数的index是否一样,避免[3, 3]的情况
class Solution():
    def twoSum(self, nums, target):
        for i in range(len(nums)):
            difference = target - nums[i]
            if difference in nums:
                j = nums.index(difference)
                if i == j:
                    continue
                else:
                    return [i, j]
  1. 利用dict的key、value进行解答(参考后面答案的)
    步骤如下:
  • 创建空的dict
  • 遍历nums
  • 判断dict里的key有没有和nums[i]相等的,没有就将target - nums[i]作为keyi作为value存到dict
  • 如果有的相等话,就返回idict [nums[i]]
class Solution():
    def twoSum(self, nums, target):
        n = len(nums)
        dict = {}
        for i in range(n):
            if nums[i] in dict:
                return [dict [nums[i]], i]
            else:
                dict [ target - nums[i]] = i

你可能感兴趣的:(leetcode)