下面介绍几种方法,供大家参考
一,暴力法, 就是按部就班用两个for循环
但时间复杂度太高了
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if target == nums[i] + nums[j]:
return [i, j]
else:
continue
二,列表的切片,思路:把第二个for循环换成列表的切片
n=0
for i in range(0,len(nums)-1):
n+=1
if (target - nums[i]) in nums[i+1:]:
return [i,nums[i+1:].index(target - nums[i])+n]
作者:boywithacoin_cn
链接:https://leetcode-cn.com/problems/two-sum/solution/python3-liang-chong-jie-fa-guan-fang-by-boywithaco/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
三,通过以空间换取速度的方式,我们可以将查找时间从 O(n) 降低到 O(1)。哈希表正是为此目的而构建的,它支持以近似恒定的时间进行快速查找。
import random
from typing import List
class Solution:
def force(self, nums: List[int], target: int) -> List[int]:
print("当前使用的暴力破解的方法\n")
n=0
for i in range(0,len(nums)-1):
# print(nums[i+1:])
# print(nums[i])
n+=1
if (target - nums[i]) in nums[i+1:]:
return [i,nums[i+1:].index(target - nums[i])+n]
def hash_map(self, nums: List[int], target: int) -> List[int]:
print("当前使用的哈希表方法\n")
hashmap={}
for i,n in enumerate(nums):
if target - n in hashmap:
return [hashmap.get(target - n),i]
hashmap[n] = i
def twoSum(self, nums: List[int], target: int) -> List[int]:
# print('type',self.type)
return {
1 : lambda nums,target : self.force(nums,target),
2 : lambda nums,target : self.hash_map(nums,target),
}[1](nums,target)
# @lc code=end
if __name__ == "__main__":
pass
作者:boywithacoin_cn
链接:https://leetcode-cn.com/problems/two-sum/solution/python3-liang-chong-jie-fa-guan-fang-by-boywithaco/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。