系列文章目录
前言
leetcode 1、two num 两数之和
一、题目描述
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
二、c++代码
1.暴力法:
代码如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i=0;i<nums.size();i++)
{
for(int j=i;j<nums.size();j++)
{
if(nums[i]+nums[j]==target)
{
return {i,j};
}
}
}
return {};
};
};
2.两遍哈希表
代码如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int>hash;
for(int i=0;i<nums.size();i++)
{
hash[nums[i]]=i;
}
for(int i=0;i<nums.size();i++)
{
int t=target-nums[i];
if(hash.find(t)!=hash.end() && hash[t]!=i)
{
return vector<int> {i,hash.find(t)->second};
}
}
return vector<int> {};
};
};
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int>hash;
vector<int> b(2,-1);
for(int i=0;i<nums.size();i++)
{
hash.insert(map<int,int>::value_type(nums[i],i));
}
for(int i=0;i<nums.size();i++)
{
int t=target-nums[i];
if(hash.count(t)>0 && hash[t]!=i)
{
b[0]=i;
b[1]=hash[t];
break;
}
}
return b;
};
};
2.一遍哈希表
代码如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int>hash;
for(int i=0;i<nums.size();i++)
{
int t=target-nums[i];
if(hash.find(t)!=hash.end())
{
return vector<int> {hash.find(t)->second,i};
}
hash[nums[i]]=i;
}
return vector<int> {};
};
};
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int>hash;
vector<int> b(2,-1);
for(int i=0;i<nums.size();i++)
{
int t=target-nums[i];
if(hash.count(t))
{
b[0]=hash[t];
b[1]=i;
break;
}
hash[nums[i]]=i;
}
return b;
};
};