zoukankan      html  css  js  c++  java
  • LeetCode 1. 两数之和

    1. 两数之和

    Difficulty: 简单

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

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

    你可以按任意顺序返回答案。

    示例 1:

    输入:nums = [2,7,11,15], target = 9
    输出:[0,1]
    解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
    

    示例 2:

    输入:nums = [3,2,4], target = 6
    输出:[1,2]
    

    示例 3:

    输入:nums = [3,3], target = 6
    输出:[0,1]
    

    提示:

    • 2 <= nums.length <= 10<sup>4</sup>
    • -10<sup>9</sup> <= nums[i] <= 10<sup>9</sup>
    • -10<sup>9</sup> <= target <= 10<sup>9</sup>
    • 只会存在一个有效答案

    进阶:你可以想出一个时间复杂度小于 O(n<sup>2</sup>) 的算法吗?

    Solution

    LeetCode第一题,如果使用暴力解法,遍历两遍数组,枚举所有的可能性可解,但是O(n^2)的复杂度必然达不到要求。

    暴力解法的时间复杂度过高的原因在于寻找target-e耗费太长时间了,创建一个哈希表,对于数组中的每一个元素e,如果e没有在哈希表中,那么把target-e放入哈希表,继续遍历,如果此时e在哈希表中,说明找到了target-e,并且返回的时候下标的顺序不受影响。

    时间复杂度:O(N)

    空间复杂度: O(N),哈希表

    class Solution:
        def twoSum(self, nums: List[int], target: int) -> List[int]:
            if not nums:
                return []
            d = {}
            for i, e in enumerate(nums):
                if e not in d:
                    d[target-e] = i
                else:
                    return [i, d[e]]
    
  • 相关阅读:
    牛客多校(2020第十场)E Game
    牛客多校(2020第十场)A Permutation
    牛客多校(2020第十场)A Permutation
    牛客多校(2020第九场)A Groundhog and 2-Power Representation
    牛客多校(2020第九场)A Groundhog and 2-Power Representation
    牛客多校(2020第九场)F Groundhog Looking Dowdy
    牛客多校(2020第九场)F Groundhog Looking Dowdy
    隐式转换
    正则(草稿)
    setimout
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14916540.html
Copyright © 2011-2022 走看看