第一题:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 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<j: sum=nums[i]+nums[j] if sum ==
target: s.append(i) s.append(j)
return s
我又尝试了另一种循环方法,但是还是出现了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 第一题 <https://blog.csdn.net/wangjikun123/article/details/80035527>
通过以上的方法,我也尝试了用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<len(nums): a=target-nums[size]
if a not in nums[size+1:]: continue
else: b=nums.index(a) if a==nums[size]:
b=nums[size+1:].index(a)+size else:
b=nums.index(a) fina=[size,b] size=size+1
return fina
后来,我将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
最后截图一下
热门工具 换一换