力扣1. 两数之和——《解题者:力扣解题之路》

力扣1:两数之和
前言:不同于某些OJ,力扣第一题对初学者不是很友好,初次看到它,可能一时想不到思路——但须知万事开头难,走出第一步,即相当于成功一半——
而:我将为你认认真真地解开它ヾ(◍°∇°◍)ノ゙


在这里插入图片描述


关键词索引:哈希映射、BF、力扣第一题

题目描述:


给定一个整数数组 nums 和一个整数目标值 target ,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。


题意补充:

示例1️⃣:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]

示例2️⃣:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例3️⃣:

输入:nums = [3,3], target = 6
输出:[0,1]

提示💥:
在这里插入图片描述



思路|破解:

A解:BF蛮力枚举

思路标识:

  • 1-》数据明确给出:数组的长度为 104 (程序员下意识地判断:这是一个相对较小的数)
  • 2-》求两数之和,这意味这我们只需 两重循环 即可
  • 3-》第一重:for i:0=>n-2,第二重:for j:i+1=>n-1,枚举出nums中数字的所有两两组合,遍历所有情况。
  • 4-》时间复杂度为O(n2)

解题:

class Solution {
public:
    vector<int>twoSum(vector<int>& nums, int target) {
    for(int i=0;i<nums.size()-1;i++){
        for(int j=i+1;j<nums.size();j++){
            if(nums[i]+nums[j]==target)return {i,j};
        }
    }
    return {};
    }
};


B解:Hash哈希映射


思路标识:

  • 1-》从A解中我们可以看到:第二重循环的实质无非是对 target-nums[i] 【查找】 ——
  • 2-》对于 查找 操作,我们很容易想到 【哈希表】 ,通过 键值 可以快速查找到 它对应的值,哈希表最理想情况下的时间复杂度仅为O(1)
  • 3-》将第二重循环变成哈希查找,可以极大地加快时间

解题:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    unordered_map<int,int>hash;
    for(int i=0;i<nums.size();++i){
        unordered_map<int,int>::iterator it=hash.find(target-nums[i]);
        if(it!=hash.end()){
            return {it->second,i};
        }
            hash[nums[i]] = i;
    }
    return {};
    }
};

动态图解o(* ^ ▽ ^ *)┛:

在这里插入图片描述



知识回顾:

  1. 对数据规模较小的问题,可以使用 蛮力枚举(BF)
  2. 哈希表(散列表),是根据关键码值(key)直接进行访问的数据结构。可以利用它,大大提高查找效率, 属于以空间换时间的典型策略

后记:

这样的题解我还是有点满意的(~ ̄▽ ̄)~迈开第一步,就是新的开始,《解题者:力扣解题之路》现在算正式开始了
愿我们一同努力,解破算法难题。
在这里插入图片描述


回到《解题者:力扣解题之路》目录:

O(∩_∩)O 《解题者:力扣解题之路》目录传送

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0<Solving)1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值