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 sameelement twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
1最优
2基础思路:遍历,但速度有点慢
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(len(nums)):
if((target - nums[i]) in nums[i+1:]):
return [i,nums[i+1:].index(target - nums[i])+i+1]
Runtime: 988 ms, faster than 27.56% of Python3
记录一下看到的c++解法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> map; // key = desired number, value = paired index
for (int i = 0; i < nums.size(); i++) {
int val = nums[i];
// Try to find the current value in the hashmap.
auto iter = map.find(val);
if (iter != map.end()) {
// Found! Return the previously-stored index and current index.
return vector<int> {iter->second, i};
}
// Didn't find an answer. Store the current index at "target - val".
// That way we'll know that we have an answer as soon as we come across
// the other part of the desired sum. E.g., if target == 12 and we
// found a 7 here at index 2, store the index 2 in the map at key
// 12 - 7 = 5. Then later when we find a "5" we're done.
map[target - val] = i;
}
}
};