题目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
例子:
[2,7,11,15], 9 输出 [0, 1]
思路:
主要考虑:
1、是否有重复得如 [3,2,4] 6 得情况,不要输出[0, 0] ,题目中说明:you may not use the same element twice.
2、考虑不同方法主要有三种:暴力,两遍哈希表和一遍哈希表。
下面给出我的实现:
两遍哈希表:
#coding:utf-8 ''' leetcode 001 question author: xuyaowen time: 2018-04-02 Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. ''' class Solution(object): def twoSum(self, nums, target): pair = dict(zip(nums,range(len(nums)))) for i in range(len(nums)): p = target - nums[i] if p in nums: if p == target/2 and pair[p] == i: continue return [i, pair[p]] #所有的解对应当下的坐标 # 1319 ms 时间效率很慢 # 解决方法,两遍哈希表 ans = Solution() print(ans.twoSum([3, 3], 6))
一遍哈希表:
#coding:utf-8 ''' leetcode 001 question author: xuyaowen time: 2018-04-02 Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. ''' class Solution(object): def twoSum(self, nums, target): seen = {} for i, n in enumerate(nums): o = target-n if o in seen: return [seen[o], i] seen[n] = i # 40ms # 一遍哈希表 ans = Solution() print(ans.twoSum([2, 7, 11, 15], 9))
暴力算法就不展示了。
更多得代码请参见: https://github.com/yaowenxu/Leetcode
转载请注明出处