Leetcode--1:Two Sum

  • 写下题干
    题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
  • 我自己用的暴力解法,遍历两边数组指针,不过语法错了。看出问题的朋友可以指正出来。
class Solution {
  
public:
    vector <int> a(5)={};
    vector<int> twoSum(vector<int>& nums, int target) {
        
         for(int i=0;i<nums.size();i++)
         {
             for(int j=0;j<nums.size();j++)
             {
                if(j==i)
                {
                    j++;
                }
                if(nums[i]+nums[j]==target)
                {
                   a.insert(a.begin(),i,j);
                    break;
                }
             }
             return a;
         }
     }
};
  • 参考答案用的两遍哈希表的方法,以下做出解析
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> a;//建立hash表存放数组元素
        vector<int> b(2,-1);//存放结果
        for(int i=0;i<nums.size();i++)
            a.insert(map<int,int>::value_type(nums[i],i));
        for(int i=0;i<nums.size();i++)
        {
            if(a.count(target-nums[i])>0&&(a[target-nums[i]]!=i))
            //判断是否找到目标元素且目标元素不能是本身
            {
                b[0]=i;
                b[1]=a[target-nums[i]];
                break;
            }
        }
        return b;
    };
};
  • 对代码做出解析
  1. map
    学过C++的朋友应该都知道键值对,前面是键,通过键可以访问到后面的值,STL中的map就是这个原理
  map<int,int> a;//建立hash表存放数组元素
  • 插入元素 insert
//以输入数组的元素作为键,将数组中每个元素的索引作为值。
 a.insert(map<int,int>::value_type(nums[i],i));//
  • 查看数组元素
  • 1.count 输入键值,查看该键值是否存在,返回0/1。
  • 2.map[键值] 返回键对应的值。此处的用法是对应题干,不出现重复的元素。这也是为什么他会用输入数组的元素作为键而不是值。
if(a.count(target-nums[i])>0&&(a[target-nums[i]]!=i))

2.Verctor

-初始化一个整型容器

//创建整型容器,两个字节大小,值全为-1,初始化
 vector<int> b(2,-1);//存放结果
  • 对容器的元素赋值
b[0]=i;
 b[1]=a[target-nums[i]];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值