很久没有刷题,感觉现在只会做简单的模拟题了o(╥﹏╥)o,从今天开始刷LeetCode题,重新复习数据结构,加油!
题目
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.
样例
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
解析
题目大意是给定一个数组和一个目标数字,找出两个数字使其和等于目标数字,返回两个数字的数组下标,答案存在且唯一。
(LeetCode和牛客的风格一样,是在函数体里写,返回结果即可,所以可以把结果存在一个vector容器中,这点和oj不太一样)
先来个暴力遍历的:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int ok=0;
vector<int> b;
for(int i=0;i<nums.size();i++)
{
for(int j=nums.size()-1;j>i;j--)
{
if(nums[i]+nums[j]==target)
{
b.push_back(i);
b.push_back(j);
return b;
}
}
}
}
};
哈希表:
只需要遍历一次。例如样例中当遍历到7时候,发现2已经存在,于是即可返回结果。
vector<int> twoSum(vector<int> &nums,int target)
{
vector<int> result;
map<int,int> maps;
for(int i=0; i<nums.size(); i++)
{
if(maps.find(target-nums[i])!=maps.end())
{
result.push_back(maps[target-nums[i]]);
result.push_back(i);
}
maps[nums[i]]=i;
}
return result;
}