Leetcode题库第一题(简单系列)

第一题:

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

以下是用Python3作为解题,但是summit之后,到最后一步出现的了timeout的情况,这种情况说明此方法属于暴力解法,还不够优化

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        self.nums=nums
        self.target=target
        s=[]
        for i in range(len(nums)):
            for j in range(len(nums)):
                if i 
  

我又尝试了另一种循环方法,但是还是出现了timeout的结果

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

在网上搜了一下其他人的方法,发现有一个方法使用的是用dictionary来做的,我看了一下编码的过程,发现使用的是while循环来做的,而且解题的思路是用target为已知的,然后去相减来求出结果,我把他人的方法复制在下面,LeetCode 第一题 

Leetcode题库第一题(简单系列)_第1张图片

通过以上的方法,我也尝试了用while循环而解题,但是我去掉了dict,因为我觉得这个位置可以不需要,但是我提交之后出现了错误,说明这个方法也是错的,这个位置主要因为在while里面有多重的if判断,导致return和size=size+1这2点,在实施和运行的时候出现了问题

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        size = 0
        while size 
  

后来,我将while循环除掉了,还是改成了我的for遍历的结构来编程构思,最后,congratulation,我通过了。

在看到的别人的解题方法的时候,我学习到了,这道题不能固有的遍历相加而做,还可以使用相减的方法,减少遍历的过程,并且当存在相同的数字的时候,要区分判断,以下是我最终通过第一题的方法。

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            a=target-nums[i]
            if a in nums[i+1:]:
                if a==nums[i]:
                    b=nums[i+1:].index(a)+i+1
                    fina = [i, b]
                    return fina
                else:
                    b=nums.index(a)
                    fina=[i,b]
                    return fina

最后截图一下


你可能感兴趣的:(Leetcode题库练习,LeetCode简单系列)