美文网首页
leetcode算法解析-1

leetcode算法解析-1

作者: BigBigTang | 来源:发表于2019-03-06 18:55 被阅读0次

题1
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

1.暴力解决方法,遍历

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

2.利用python-dict的hash特点来实现O(1)复杂度的优解

2.1首先放出来这个错误的代码,理一下思路

class Solution2_bad():
    def twoSum(self, nums, target):
        hash = {}
        for index, num in enumerate(nums):
            hash[num] = index
            if target-num in hash:
                return (hash[target-num],hash[num])
        return None

这里的思路是
dict的时间复杂度为O(1),利用dict来存放数据,一次放一个,一旦找到解就返回退出
使用enumerate来枚举出index-num对
执行顺序是先放入后检查,测试了一组数据[2,4,6,7]-9似乎答案正确了,就提交了答案,结果就很惨
错误的原因:如果先放入第一组数据在碰到target=第一个数字*2的情况就会FAIL,因为不能使用重复的数字

2.1于是就改成下面这种解法

class Solution2():
    def twoSum(self, nums, target):
        hash = {}
        for index, num in enumerate(nums):
            if target - num in hash:
                return hash[target-num],index
            hash[num] = index

先检查后存入,这样就避免了2.1的疏漏,而且会比2.1少一次字典的插入
需要注意的是这时候返回的结果的第二个数字的下标就直接用index了,因为还没有存入字典中

另外有一个注意点,关于hash[target-num],index这两者的先后顺序
由于target-num是在字典中查找,所以一定是先插入到了字典中,所以下标会小

相关文章

  • leetcode算法解析-1

    题1:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回...

  • Leetcode算法解析1-50

    #1 Two Sum
    link Description:Given an arr...

  • 回溯,贪心,动态规划

    1.回溯算法思想leetcode 112 号算法题:路径总和leetcode 113 号算法题:路径总和 IIle...

  • Quick Select Algorithm 快速选择算法

    更多代码和Leetcode题目解析请看这里 什么是Quick select? Quick select算法通常用来...

  • LeetCode问题图解-1

    本文准备讲解1个算法编程问题, 这个算法编程问题来自LeetCode平台。不了解.LeetCode平台的读者可以...

  • ARTS第三周(2018-12-16)

    1.Algorithm:每周至少做一个 leetcode 的算法题 第一道算法题:https://leetcode...

  • LeetCode基础算法-数组

    LeetCode基础算法-数组 算法 LeetCode 数组相关 1. 从排序数组中删除重复项 描述:给定一个排序...

  • LeetCode问题图解-7

    本文准备讲解1个简单的算法编程问题, 这个算法编程问题来自LeetCode平台。不了解.LeetCode平台的读者...

  • LeetCode问题图解-3

    本文准备讲解1个算法编程问题, 这个算法编程问题来自LeetCode平台。不了解.LeetCode平台的读者可以阅...

  • LeetCode问题图解-4

    本文准备讲解1个算法编程问题, 这个算法编程问题来自LeetCode平台。不了解.LeetCode平台的读者可以阅...

网友评论

      本文标题:leetcode算法解析-1

      本文链接:https://www.haomeiwen.com/subject/lvixpqtx.html