zerglurker 发表于 2018-11-21 10:09

算法学习-求两数之和


解题思路:
题目本身难度不大,难度大的地方在于时间限制和python知识
最开始想到的方法就是双层循环,求和判断.但是这个方法在最后一个例子测试的时候超时了(我本地i7需要10秒时间)
然后查了一下list的方法,发现有一个index函数,可以求值在队列中的序号
那么可以先排序,再处理.因为是排过序了,所以只要和大于target了,就可以终止循环,进一步提高时间了
class Solution:
    def twoSum(self, nums, target):
      """
      :type nums: List
      :type target: int
      :rtype: List
      """
      cacls = nums[:]
      cacls.sort()
      for i in range(len(cacls) - 1):
            for j in range(i + 1, len(cacls)):
                if cacls + cacls == target:
                  head = nums.index(cacls)
                  tail = nums.index(cacls)
                  if head == tail:
                        tail = nums.index(cacls, head + 1)
                  ret =
                  ret.sort()
                  return ret
                if cacls + cacls > target:
                  break
      return []

zerglurker 发表于 2018-11-21 10:25

这个题目还有一个更好的方法,就是利用dict,这个算法如下,理论上消耗的时间是O(n)
def twoSum(nums, target):
    data = dict()
    for i in range(len(nums)):
      if nums not in data:
            data] = i
      else:
            return ], i]
    return []

黯夜_孤星 发表于 2018-11-21 10:50

应用数学思想

qichen 发表于 2018-11-21 10:56

好像做过,leetcode还是lintcode的题:eee

Bayminx 发表于 2018-11-21 11:38

估计是想让你用lambda表达式吧,你试试能不能做出来,我才学有限,只是提供下思路哈

KID丶 发表于 2018-11-21 13:45

为什么我写的两层循环没有超时

zerglurker 发表于 2018-11-21 21:43

qichen 发表于 2018-11-21 10:56
好像做过,leetcode还是lintcode的题

这个是LeetCode的题目,我打算从第一题往后尽可能的做,欢迎随时讨论

zerglurker 发表于 2018-11-21 21:44

Bayminx 发表于 2018-11-21 11:38
估计是想让你用lambda表达式吧,你试试能不能做出来,我才学有限,只是提供下思路哈

lambda表达式可以用来生成,但是这里面情况有点复杂,原始数据是没有排序的,而且存在相同值的元素
单纯用lambda很难完美通过所有例子

zerglurker 发表于 2018-11-21 21:45

KID丶 发表于 2018-11-21 13:45
为什么我写的两层循环没有超时

你要不发上来我也学习一下,看看我的问题在哪里?
我这个是LeetCode题库第1题

KID丶 发表于 2018-11-22 00:26

zerglurker 发表于 2018-11-21 21:45
你要不发上来我也学习一下,看看我的问题在哪里?
我这个是LeetCode题库第1题

明天给你发一下,
页: [1] 2
查看完整版本: 算法学习-求两数之和