欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【leetcode】1两数之和

程序员文章站 2022-04-04 09:53:12
...

打开leetcode突然想用python写,然后开着菜鸟写python,百度很久还去贴吧求助半天,最后写了一段很丑的代码atom运行可以,leetcode运行一边报错一边出结果,说twosum参数给多了,就贴一下自己的学习一下大佬的吧。

class Solution(object):
    def twoSum(self,num,number,target):
        global flag
        flag=0
        if number>target :
            return
        if num+number==target :
            flag=1
            return number

nums = [2,7,11,15]
target = 9
flag=0
x=Solution()
for num in nums:
    for number in nums:
        if number == num:
            continue
        x.twoSum(num,number,target)
        if flag==1:
            print (nums.index(num),nums.index(number))
            break
    if flag==1:
        break

【leetcode】1两数之和

atom运行成功,不过仅此而已。

再说大佬的,作为小白真的是一边看一边搜那些函数都是啥。

原链接在这https://www.jianshu.com/p/461da897fe21

第一个,同样的暴力解法,但是短

def twoSum(self, nums, target):
    for i in range(len(nums)):
        for j in range(i + 1, len(nums)):
            if nums[i] + nums[j] == target:
                return [i, j]

所谓小白就是,别的语言写习惯了,点进去人家给了class,我扒着菜鸟现学也没想过放弃class,还试图属性方法之后调用,没想过直接一起……

而且没用上人家的输入,自己跟自己玩……

顺便,贴一个菜鸟关于range()函数的用法

【leetcode】1两数之和

然后就是一遍哈希,适用有限

def twoSum(self, nums, target):
    # 产生散列表
    hash_ = dict(zip(nums, range(len(nums))))
    # 反向寻找
    for i in range(len(nums)):
        other=target-nums[i]
        if hash_.get(other):
            return [i,hash_[other]]

用了字典,简而言之就是,字典的键是列表里的值,值是索引。然后只遍历一遍,到你了就算一下,你加x到target,然后利用哈希表的特性看看这个x的位置有没有东西,没有就不是,有就返回那个索引。

还是那句话,感觉适用有限。顺便贴个菜鸟的zip()

【leetcode】1两数之和

但是还有个类似的,在 https://blog.csdn.net/zjn295771349/article/details/86572602

class Solution:
    def twoSum(self, nums, target):
        n = len(nums)  
        #创建一个空字典  
        d = {}  
        for x in range(n):  
            a = target - nums[x]  
            #字典d中存在nums[x]时  
            if nums[x] in d:  
                return d[nums[x]],x  
            #否则往字典增加键/值对  
            else:  
                d[a] = x  

贴一下原博的解释,已经很清楚了

【leetcode】1两数之和

于是官解还有个两遍哈希,链接在https://leetcode-cn.com/problems/two-sum/solution/xiao-bai-pythonji-chong-jie-fa-by-lao-la-rou-yue-j/

【leetcode】1两数之和

def twoSum(nums, target): 
    hashmap={} 
    for ind,num in enumerate(nums): 
        hashmap[num] = ind 
    for i,num in enumerate(nums): 
        j = hashmap.get(target - num) 
        if j is not None and i!=j:
            return [i,j]

【leetcode】1两数之和

【leetcode】1两数之和

今日份的面向复制粘贴编程结束╮(╯▽╰)╭

 

相关标签: Python leetcode