两数之和(leetcode)

问题描述:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]



解决方案:

先将数组存入map,key为数组中的数,value为数的下标。再遍历数组,在map中查找两数和减去当前数的差值,如果找到了,输出hash表对应值的下标,对下标的有效性进行判断。

class Solution {

public:

vector twoSum(vector& nums, int target) {

int length = nums.size();

vector result;

//建立map

map dict;

for (int i = 0; i < length; i++)

{

//把元素和对应位置存入map

dict[nums[i]] = i + 1;

}

for (int i = 0; i < length; i++)

{

int val = nums[i];

int left = target - val;

int index = dict[left];

//对元素进行判断

if (index != 0 && index != i + 1)

{

result.push_back(i);

result.push_back(index - 1);

return result;

}

}

return result;

}

};

你可能感兴趣的:(两数之和(leetcode))