题目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
给出一个整形数组,返回数组中两个值的索引,这两个值相加等于一个特殊的target
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
方法1:直接嵌套两个for循环
缺点:时间复杂度较大,不符合要求
class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ result = [] for i in range(len(nums)): for j in range(i+1,len(nums)): if target == nums[i] + nums[j]: result.append(i) result.append(j) return result
方法2:复制一个数组,将遍历过的值在两个数组中做处理
缺点:该方法达到了提交要求,但任然不是最优解
class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ result = [] nums_copy = nums.copy() # 复制数组 i = 0 while len(nums) > 0: pop = nums.pop(0) # 删除数组元素 j = nums_copy[i] # 遍历到的值临时赋值 nums_copy[i] = 'x' # 处理遍历到的值 if target - pop in nums_copy: nub = nums_copy.index(target - pop) # 取索引 if i != nub: result.append(i) result.append(nub) break nums_copy[i] = j # 恢复处理值 i += 1 return result