目录
1.暴力解法: T (n) = O(n2) S(n)=O(1)
2.hashmap:T (n) = O(n) S(n)=O(n)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
1.暴力解法: T (n) = O(n2) S(n)=O(1)
遍历每一个元素i,拿到该元素i后再遍历其后面元素j,判断两个元素i+j=target ?,是则输出i,j的索引下标
2.hashmap:T (n) = O(n) S(n)=O(n)
申请一个hashmap保存已经遍历过的值和索引,当遍历新的值时,判断差是否等于已遍历的值,是的话就取出其索引,否则继续
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
# 保存已经遍历的 值:索引
hashmap={}
for i,num in enumerate(nums):
# 如果当前target减当前值等于已经遍历的值,则找到了答案
if target - num in hashmap:
return [i,hashmap[target - num]]
# 否则存储值:索引,继续遍历
else:
hashmap[num] = i
return []
执行结果:
通过
显示详情
执行用时:8 ms, 在所有 Python 提交中击败了99.88%的用户
内存消耗:13.9 MB, 在所有 Python 提交中击败了16.21%的用户