Leetcode-01-Two Sum-python

1.1 关键字:哈希

题目如下:

给定一个整数数组,返回两个数字的索引,使它们相加到特定目标。
您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

分析:
最粗暴的方式就是直接利用暴力搜索对整数数组进行遍历,通过遍历的操作进行相关运算,并进行判断是否满足要求,最后输出结果。

1.2 代码(暴力搜索)

d

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        nums.sort()
        size = len(nums)
        i = 0
        num = i
        while i< size:
            if(target<nums[i]):
                num =i 
                break
            i = i+1
        onenum=0
        flog = ()
        while onenum <= num:
            twonum = onenum +1
            while twonum <= num:
                sumnum = nums[onenum] + nums[twonum]
                if sumnum == target:
                    flog = [onenum,twonum]
                    break
                twonum = twonum +1
            onenum = onenum +1
        if len(flog) == 0:
            return 
        else:
            return flog

1.3 思考

  • 对暴力搜索的不足的考虑,便查看别人的代码,利用字典解决
def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        if len(nums) <= 1:
            return False
        buff_dict = {}
        for i in range(len(nums)):
            if nums[i] in buff_dict:
                return [buff_dict[nums[i]], i]
            else:
                buff_dict[target - nums[i]] = i
  • 整体的对比思考
    通过两段代码的比较对python的相关内容的熟悉,如果在python中想实现c或Java中for(xxx;xxx;x++)的操作的利用range函数

range函数:1.range(x,y)表示范围在x到y之间,包括x,不包括y。2.range(x,y,z)表示范围x到y之间,包括x,不包括y,但是执行的操作是每次加z。3.range(x)表示范围从0到x,不包括x

python的字典想法,看了别人的代码用的是字典,加上看到了一篇关于java对这道题的思考,便决定看看字典的原理,字典的原理是哈希表的实现

采用不同的算法的思考
利用字典(哈希):56ms
利用暴力:return 的位置在循环内部:9220ms
return 的位置在方法结束:8680ms

暴力的原因:return放在循环内部提早结束其实是会提高效率的,但是为什么出现了上面反而效率低,因为在return 一个表达式比一个直接的结果反而增加了繁重的压力,O(n2)的时间复杂度,常数空间复杂度-暴力算法(Brute force)
暴力算法思路非常简单,遍历数组中每个元素x并且试图找到是否有另外一个值相加和等于目标数,即target - x。因为每一次匹配值都需要遍历一次数组剩余元素,所以时间复杂度是n平方。
O(n)的时间复杂度,n的空间复杂度-哈希表(Hash table),通过将数组的值和索引使用哈希表存储起来,我们可以把匹配值的时间复杂度降为1。因为哈希直接通过值和索引值建立联系,通过target-顺序,然后通过索引判断这个值是否在哈希表中。

1.4 相关链接

1.Java的思考暴力算法和哈希

2.关于Python中的字典(映射、哈希、散列)理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值