题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解题思路
- 由于每个下标对应的元素不能重复使用,所以在列表 nums 循环中,先取出下标 i ,再创建由下标 i 之后的元素组成的新列表 ls;
- 然后在列表 ls 循环中,判断 nums[ i ] + ls[ j ] 是否等于目标值 target ;
- 等于的话则返回 [i, j+i+1] 。需要注意的是元素 ls[ j ] 在原列表 nums 的下标等于 j+i+1 。
代码提交
解法1:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
ls = nums[i+1:]
for j in range(len(ls)):
if nums[i] + ls[j] == target:
return [i, j+i+1]
return [-1, -1]
执行用时 :5948 ms, 在所有 Python3 提交中击败了18.36%的用户
内存消耗 :14.5 MB, 在所有 Python3 提交中击败了16.41%的用户
解法2:
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i, a in enumerate(nums):
for j, b in enumerate(nums[i + 1 - len(nums):]):
if a + b == target:
return [i, j + i + 1]
return [-1, -1]
执行用时 :3124 ms, 在所有 Python 提交中击败了30.03%的用户
内存消耗 :13.4 MB, 在所有 Python 提交中击败了6.17%的用户
拓展:python内置函数enumerate()
语法:
enumerate(sequence, [start=0])
参数:
- sequence — 列表或其他可迭代对象
- start — 下表起始位
返回值:
返回 enumerate(枚举) 对象。
实例:
list = ['1','5','3','6','8']
for i, num in enumerate(list):
print([i, num])
输出:
[0, '1']
[1, '5']
[2, '3']
[3, '6']
[4, '8']