首页 > 编程语言 > 详细

Leetcode (1) 两数之和 ---python

时间:2019-08-31 19:52:40      阅读:79      评论:0      收藏:0      [点我收藏+]

0、开个博客记录一下学习过程,就这样。

第一次打开力扣,不知道从怎么写代码,怎么执行,鼓捣了半天,终于知道在哪写了。。。(菜的无与伦比不是浪得虚名)一般题目都是定义一个函数,把函数补充完整就可以了。知道这个之后就先随便选了个简单的,写完,执行,报错,改错,执行,报错,,,看了看别人的代码,看不懂。。。算了,我还是从第一题开始吧!

 

题目:

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

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

示例:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

看上去不是很难,两次遍历,返回相加结果成立的,几步就写完了。如下:

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

 

时间复杂度:O(n²)。用[2, 7, 11, 15],9测试也没有出现问题,我就提交上去了。结果提交结果显示"超出时间限制",一看测试用的列表,一个页面都放不下。。。

我去网上搜答案的过程中突然想到另一种方法,马上就去改了以下代码,如下:

class Solution:
  def twoSum(self, num: List[int], target: int) -> List[int]:
    for j in range(len(num)-1):
      a = target - num[j]
      for i in range(j+1,len(num)):
        if num[i] == a:
          li = [j,i]
    return li

 

时间复杂度:O(n²)。测试成功,提交也成功!

技术分享图片

 

 不过看起来效率好像低了点,时间复杂度有点大?去网上搜了以下其他答案,如下

 

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """           
        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
        #边往字典增加键/值对,边与nums[x]进行对比

时间复杂度:O(1)。

技术分享图片

 

 我还是太年轻了,学习!

Leetcode (1) 两数之和 ---python

原文:https://www.cnblogs.com/tyt666/p/11440083.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!