题目:
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.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
思路:
可以用一个 map<int /*target - nums[i]*/, int/*数组的索引*/> 来保存一个数,当遍历 数组 nums 时,要是能在 map中找到 数组的某个数,就代表找到了该数 target = nums[i] + target - nums[I]。代码如下:
//
// Created by 陈国威 on 2018/3/13.
//
//Given nums = [2, 7, 11, 15], target = 9,
//Because nums[0] + nums[1] = 2 + 7 = 9,
//return [0, 1].
#ifndef LEETCODE_SOLUTION_H
#define LEETCODE_SOLUTION_H
#include <vector>
using std::vector;
#include <unordered_map>
using std::unordered_map;
class Solution
{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
std::unordered_map<int, int> record;
for (int i = 0; i != nums.size (); ++i)
{
auto found = record.find (nums[i]);
if ( found != record.end ())
return {found->second, i};
record.emplace (target - nums[i], i);
}
}
};
#endif //LEETCODE_SOLUTION_H
我的所有LeetCode代码:https://github.com/chenguowei/LeetCode