网页链接
1.第一版
class Solution(object):
def twoSum(self, nums, target):
count=len(nums)
for i in range(0,count-1):
for j in range(i+1,count):
if nums[i]+nums[j]==target:
list.append(i)
list.append(j)
return list
test=Solution()
print(test.twoSum([2,5,5,11],10))
2.学习版
首尾递进查找,时间复杂度是 O(nlogn)
class Solution(object):
def twoSum(self, nums, target):
head=0
tail=len(nums)-1
sort_id=sorted(range(len(nums)),key=lambda k: nums[k])#按照列表中第一个元素排序
#sort_id=[1, 0, 2, 3]
result=nums[sort_id[head]]+nums[sort_id[tail]]
while result!=target:
if result>target:
tail-=1
elif result<target:
head+=1
result = nums[sort_id[head]] + nums[sort_id[tail]]
return [sort_id[head],sort_id[tail]]
test=Solution()
print(test.twoSum([5,2,5,11],10))
sorted函数,针对的对象是list内的元素!不是整个list,所以,在key=函数这个应用时,是直接作用于元素对象上,并非list上
3.最终版
使用字典,时间复杂度是 O(n)
class Solution:
def twoSum(self, nums, target):
dict={}
for index,num in enumerate(nums):#enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
another_num=target-num
if another_num in dict:
return [dict[another_num],index]
dict[num]=index
return None
test=Solution()
print(test.twoSum([5,2,5,11],10))
enumerate()用法:
(1)列表
text=[‘a’,1,‘boy’,‘girl’]
print list(enumerate(text))
[(0, ‘a’), (1, 1), (2, ‘boy’), (3, ‘girl’)]
(2)元组
text=(‘a’,1,‘boy’,‘girl’)
print list(enumerate(text))
[(0, ‘a’), (1, 1), (2, ‘boy’), (3, ‘girl’)]
(3)字典
text={‘boy’:‘xiao’,‘girl’:2,‘twice’:‘lisa’}
print list(enumerate(text))
[(0, ‘boy’), (1, ‘girl’), (2, ‘twice’)]
最后
以上就是诚心小鸭子最近收集整理的关于python 力扣1两数之和的全部内容,更多相关python内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复