Leetcode第一题【1.两数之和】

做了好多遍的第一题 除了暴力法 为啥总是忘记怎么写呢 呜呜呜

两数之和

leetcode链接

leetcode第一题

解题思路

方法一:暴力求解

  • 基本思想:两层for循环遍历 i从0开始到nums.size()-1,j从i+1到nums.size()-1,如果nums[i]+nums[j]==target,则返回{i,i};
  • 记:return {} 返回一个列表
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int i,j;
        for(i =0;i<nums.size();i++){
            for(j=i+1;j<nums.size();j++){
                if(nums[i]+nums[j]==target){
                    return {i,j};
                }
            }
        }
        return {};
    }
};

方法二:哈希表

  • 基本思想:什么时候用哈希法?当需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法
  • C++ 知识补充:常见的三种哈希结构有
    • 数组
    • set(集合)
    • map(映射)
  • C++ map有三种类型
    map类型
  • map<key,value>举例,find()方法返回值是一个迭代器,成功返回迭代器指向要查找的元素,失败返回的迭代器指向end。maps.find(1)==maps.end()表明没有1这个元素
  • count()方法返回值是一个整数,1表示有这个元素,0表示没有这个元素,maps.count(1)==0 表明没有1这个元素
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> a;
        vector<int> b(2,-1); // 初始化一个值为-1的2维 vector
        int i,j,t;
        for ( i = 0; i<nums.size(); i++){
            t = target - nums[i];
            if(a.count(t)) {b[0] = a[t]; b[1] = i; break;}
            a[nums[i]] = i; // map添加元素 将a[nums[i]]赋值为下标
        
        } 
    return b;
    }
};

参考链接:
https://mp.weixin.qq.com/s/g8N6WmoQmsCUw3_BaWxHZA
https://blog.csdn.net/lemn_de/article/details/119325232

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值