1、始终觉得学习leetcode太慢,现在开始改变方法,用背题的方法先初步建立思路
同样的题多来几种解法,想必可以加深理解。
1、解法1使用python的特殊函数
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
j=-1
for i in range(len(nums)):
if (target-nums[i]) in nums:#特殊函数,需要记住
if nums.count(target-nums[i])==1&(target-nums[i]==nums[i]):
continue
else:
j=nums.index(target-nums[i],i+1)
break
if j>=0:
return[i,j]
else:
return []
需要特别了解的新知识是:
1、if (target-nums[i]) in nums 判断该值有没有存在在数组中,有的话返回true
2、nums.count(target-nums[i]) 判断()里面有几次出现
3、nums.index(a,b,c) 元素a在从下标b到下标c中查找,要是有的话返回index,要是没有的话那就-1;
这个函数大概意思是,找整个数组里面有没有target - number【i】的数,要是有的话还要进行各种各样的检查,看这个数是不是他自己。现在又另外的方法可以解决这个问题。只查找i之前的数组有没有target - number【i】
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
j=-1
for i in range(len(nums)):
temp=nums[:i]
if (target-nums[i]) in temp:
j=temp.index(target-nums[i])
if(j>=0):
return [i,j]
这样操作即可
3、更好的方法是使用哈希表
哈希表的本质是查表。这样就可以牺牲内存,换取时间的加快。
为什么哈希表可以加快算法?可以看看这篇文章
于是代码可以这样写
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
hashmap={}
for ind,num in enumerate(nums):
j = hashmap.get(target-num)
if j is not None and i!=j:
return [i,j]
总结一下是这样的:
定义了一个字典,这个字典叫做hashmap
enumerate是个关键字,作用是枚举。
dictionary.get()作用是看某个字典里面有没有什么元素;如果没有返回None