leetcode(2)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值