两数之和的解决之路= =
题干描述
测试案例(部分)
第一次
比较简单,两数之和为target值就直接return结束,也不用管是否有多个符合条件的一对下标。直接双循环解决。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for k, v in enumerate(nums):
for i in range(k+1, len(nums)):
if v + nums[i] == target:
return [k, i]
else:
continue
return None
测试,没什么问题,直接提交,通过了。
第二次
再考虑是否有优化的可能。第一天学到了双指针的方法,但是是要求有序数组才可以实现的逻辑,这题不适合一上来就排序,因为最终返回的是原来数组的下标,排序反而打乱了下标,导致最后返回下标时很麻烦。
再看了看第一天写的代码,三数之和,通过确定的a
和b
,就可以通过total-a-b
就能得出c
,从而少写一个循环。那我们这里也能用,通过target-a
确定b
,这样就可以减少一次循环了。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for k, v in enumerate(nums):
temp = target - v
if temp in nums:
i = nums.index(temp)
if i != k:
return [k, i]
else:
continue
return None
提交了,超过了57%,快60%了,结束。