两数之和

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("没有找到合适的值")

方案五:直接在线性表里面搜索,重复问题很麻烦,待改进

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值