题目描述:
public:
vector<int> twoSum(vector<int>& nums, int target) {
int len=nums.size();
int i,j;
vector<int> a(2);
for(i=0;i<len-1;i++)
{
a[0]=i;
for(j=i+1;j<len;j++)
if(nums[j]==target-nums[i])
{
a[1]=j;
return a;
}
}
return a;
}
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ret;
map<int,int> my_map;
int len=nums.size();
for(int i=0;i<len;i++)
{
int num=nums[i];
if(my_map.find(target-num)!=my_map.end())
{
ret.push_back(i);
ret.push_back(my_map.find(target-num)->second);
return ret;
}
else
my_map[num]=i;
}
return ret;
}
};
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
解题代码:class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int len=nums.size();
int i,j;
vector<int> a(2);
for(i=0;i<len-1;i++)
{
a[0]=i;
for(j=i+1;j<len;j++)
if(nums[j]==target-nums[i])
{
a[1]=j;
return a;
}
}
return a;
}
};
运行时长过长,用map可以提高效果:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ret;
map<int,int> my_map;
int len=nums.size();
for(int i=0;i<len;i++)
{
int num=nums[i];
if(my_map.find(target-num)!=my_map.end())
{
ret.push_back(i);
ret.push_back(my_map.find(target-num)->second);
return ret;
}
else
my_map[num]=i;
}
return ret;
}
};
注意学习map容器:
map.end() 指向map最后一个元素之后的地址;map.begin()指向map的第一个元素。
map 是一类关联式容器,特点是增加和删除节点对容器的影响很小.