【leetcode】1两数之和

打开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

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()函数的用法

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

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()

但是还有个类似的,在 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  

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

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

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]

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

发布了12 篇原创文章 · 获赞 15 · 访问量 9583

猜你喜欢

转载自blog.csdn.net/wind_day/article/details/104109907