当前位置: 首页 > backend >正文

力扣题解:1、两数之和 (梦开始的地方)

力扣的第一个题可能会让大家放松警惕,但是对于刚开始刷题的小伙伴,这道题并不简单,我相信大多数小伙伴都是和我一样,先双循环暴力解题,然后超时。

而官方给出的哈希表解法,为这道题提供了一种全新的思路。然而,对于使用 C 语言的小伙伴来说,却又遇到了新的难题。C 语言标准库中并没有哈希表的内容,这意味着我们需要自己动手实现哈希表。如果选择使用线性哈希表,又会面临空间容量过大的问题,这无疑增加了解题的难度。

所以我们这题通常用C++的解法,本题呢,我就需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,某元素是否遍历过,也就是 是否出现在这个集合。

我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适

因为我们不需要让集合的内容有序,所以本题我们使用的时unordered _map。

(如果有只用C语言的小伙伴,可以看一下C++的内容,在基础语法方面是大差不差的,可以简单了解派生、继承、封装,然后学一下STL部分的容器(vector  set map)就可以用C++进行解题了。)

具体解题思路:

  1. 使用哈希表存储元素及其下标

    • 使用一个 unordered _map(哈希表)来存储数组中的元素及其对应的下标。这样可以在常数时间内查找某个元素是否存在。

    • 哈希表的键是数组中的元素值,值是该元素的下标。

  2. 遍历数组

    • 遍历数组 ,对于每个元素nums[i] ,计算 it=target-nums[i]

    • 检查 i t 是否已经在哈希表中:

      • 如果在,说明找到了满足条件的两个元素,返回它们的下标。

      • 如果不在,将当前元素及其下标存入哈希表。

  3. 返回结果

    • 如果找到满足条件的两个元素,返回它们的下标。

    • 如果遍历结束后仍未找到满足条件的元素,返回一个空的向量。

以下是代码和解析:

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {
//创建map容器存储遍历结果std::unordered_map<int,int>m;for(int i=0;i<nums.size();i++)        {
//创建迭代器寻找目标值auto it=m.find(target-nums[i]);
/当迭代器不为end时,代表找到目标值if(it!=m.end()){
//找到目标值后创建结果容器,两个值的下标都放入容器Vvector<int>v;v.push_back(i);
//map的val是数组下标,所以放入v的是it->secondv.push_back(it->second);return v;}
//遍历数组,放入mapm.insert(make_pair(nums[i],i));}
//如果没有则返回空容器vector<int>emmpty;return emmpty;}
};

http://www.xdnf.cn/news/5256.html

相关文章:

  • 基于 Streamlit 与 LangChain 构建具备对话记忆的 AI Agent
  • 汽车四缸汽油机曲柄连杆机构设计关键技术研究
  • DAMA第10章深度解析:参考数据与主数据管理的核心要义与实践指南
  • Ansible模块——从控制节点向目标主机复制文件!
  • 文生视频模型速读:LTX-Video
  • Flink 运维监控与指标采集实战
  • 排序算法——总结
  • MySQL COUNT(*) 查询优化详解!
  • 【C++】string类(一)构造、重载、容量操作、访问与遍历(迭代器、范围for)、练习
  • 计算机网络:WiFi路由器发射的电磁波在空气中的状态是什么样的?
  • 打工人TOP,截图工具天花板
  • 智能商品推荐系统技术路线图
  • RabbitMQ深入学习
  • Taccel:一个高性能的GPU加速视触觉机器人模拟平台
  • yum install 如何卸载
  • vue3的响应式设计原理
  • DHT11温湿度传感器
  • 05 mysql之DDL
  • 复习javascript
  • MindSpore框架学习项目-ResNet药物分类-模型评估
  • 前端EXCEL插件,智表ZCELL产品V3.0 版本发布,底层采用canvas全部重构,功能大幅扩展,性能极致提升,满足千万级单元格加载
  • git 忽略 打包文件
  • CSS弹性布局
  • 深入解析进程地址空间:从虚拟到物理的奇妙之旅
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类字体QFont)
  • Linux基本指令(一)
  • HDFS 常用基础命令详解——快速上手分布式文件系统
  • [python] 类
  • AtCoder Beginner Contest 405(CD)
  • 问题及解决01-面板无法随着窗口的放大而放大