1、方案一:使用C++实现,利用
//使用双层循环,循环过程类似遍历配对过程。以下是原始代码:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)//创建函数,两个形参
{
vector<int> Sum;//用于保存输出数组
for(int i = 0; i < nums.size(); i++)//这里i++自动提前了起始点
{
for(int j = i + 1; j < nums.size(); j++)//将当前元素与下一个元素比较
{
if((nums[i] + nums[j]) == target)//判断当前两数之和是否相等
{
Sum.push_back(i);//将正确结果存入vector容器中
Sum.push_back(j);
}
}
}
return Sum;
}
};
方案二:使用C++实现,使用了哈希表
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int> sum;
unordered_map<int, int> recode;
for(int i = 0; i < nums.size(); i++)//依次遍历整个序列
{
int temp = target - nums[i];//存储当前序列与目标值的差值
if(recode.find(temp) != recode.end())//利用迭代器在哈希表的key序列中寻找,是否有与差值相等的值
{
sum = vector<int>({i,recode[temp]});
return sum;//若找到,则返回
}
else
recode.insert({nums[i],i});//否则将当前元素的key和value存入无序map容器中
}
sum = vector<int>({-1,-1});
return sum;//若一直没查找到,返回(-1,-1)
}
};
方案三:使用Python实现,使用了双层循环
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(0, len(nums)) :
for j in range(i + 1, len(nums)) :#range中小于第二个参数值的数值都会被执行
if nums[i] +nums[j] == target :
return [i,j]
方案四:使用Python实现,使用哈希表
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashmap = dict() #创建空白字典
for i in range(len(nums)): #for循环遍历整个列表
temp = target - nums[i] #求出目的值和当前值之差
if temp in hashmap : #判断这个差是否在字典中
return [i, hashmap[temp]]#若在字典中则返回当前值和差的键值
else :
hashmap[nums[i]] = i #否则将当前值和它的索引存储到字典中
print("没有找到合适的值")
方案五:直接在线性表里面搜索,重复问题很麻烦,待改进