题目:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
链接:https://leetcode-cn.com/problems/two-sum/description/
非常low的答案代码:
class Solution(object):
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(len(nums)):
if (i!=j):
if(nums[i]+nums[j]==target):
return [i,j]
这道题非常的简单了,是为了熟悉python才选择的简单题,python语法啥的我都忘了。。。弄了好久才对的,然后下面是大神(网上搜的)代码:
class Solution(object):
def twoSum(self, nums, target):
nums_bak = nums.copy() //将原数组copy一份,最后的时候取索引
nums.sort() //排序
i = 0
j = 0
for k in range(0, (len(nums) - 1)): //由于是排序过的,因此只需要将相邻俩个元素相加,直到大于等于
if nums[k] + nums[k + 1] >= target: //需要找的目标,就可以停止了,进入下一步
i = k
j = k + 1
break
while i >= 0 and j < len(nums): //判断索引有没有越界
if nums[i] + nums[j] < target: //如果结果小了,向前找更小的
j += 1
elif nums[i] + nums[j] > target: //如果结果大了,向后找更大的
i -= 1
else:
if nums[i] == nums[j]:
return [nums_bak.index(nums[i]), nums_bak.index(nums[j], i + 1)] //如果两数索引相等,加一位坐标记位(?没太 //看懂这一行)
else:
return [nums_bak.index(nums[i]), nums_bak.index(nums[j])] //如果两数索引不同,直接返回