2018/08/06-leetcode两数之和

其实是很简单的题目,但是还是写了很久,每次都是因为代码超时,如果从原理上看,自我感觉还是比较良好,觉得没问题,为什么提交通不过勒。当时的提交结果,自己试了不同的nums都没问题,但是就是超时。不过也开始因为这个问题才开始意识到程序好耗时的问题。之前都是直接写了完事,电脑跑去吧,然后自己就等待,没有想到可以改进,将时常缩短,遇到这个问题真的很好。

附上原来的代码(错误示范),现在想想,很多步骤好浪费资源。

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            for j in range(1,len(nums)):
                if nums[i]+nums[j] == target and i!=j :
                    return i,j

一开始本来想的是i从头开始,j从i的后面开始遍历,然后不知道怎么写才能这样设置。这一开始的逻辑是对的,而且觉得也不会浪费。只是笨蛋的自己,只会range(n),所以就换路子,还设置i !=j。python2中不等于可以是<>,python3中不等于改成!=。现在想想好笨啊,就是不会写range(i+1,n)。苦笑。

一直超时,后来将j遍历的range修改了,判断条件修改为:target - nums[i] == nums[j],发现还是超时。怎么也找不到原因,参考了别人的才发现不是判断条件顺序问题,别人写的加了break,如果找到满足条件就输出,不用全部都找一遍,后面全都是浪费,如果前两个就满足就输出,不然后面全都浪费。

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        n=len(nums)
        for i in range(n):
            for j in range(i+1,n):
                if nums[j] == target - nums[i]:
                    return i,j
                    break
                else:
                    continue

虽然也是通过了,但是也是很慢。

苦笑。。。接下来继续找新的方法来加快。

所以juypter可以加一个扩展,计算每个cell的运行时间

猜你喜欢

转载自blog.csdn.net/Einsam0/article/details/81461866