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

每日一题 ##1两数之和

仅以此记录所学所想,如有错误,还望指正。

1. 代码块

class Solution{public:vector<int> twoSum(vector<int>& nums, int target) {//建立哈希表,int1:key=元素值,int2:value=元素索引,因为我们要通过元素值来查找,所以把它作为key,元素索引作为valueunordered_map<int,int>hashtable;for(int i=0;i<nums.size();i++){int complement=target-nums[i];//如果可以找到这个值,则返回两个值的索引auto it=hash.find(complement);if(it!=hash.end()) return {it->second,i};//如果没有找到,则将当前值和索引存入哈希表hash[nums[i]]=i;}return {};}
}

2. 简单理解

-使用哈希表,时间复杂度为O(n),如果暴力解题,时间复杂度为O(n^2)。
但我感觉理解起来差不多,暴力是向后查找complement,用for循环遍历数组,O(n);哈希表是向前查找(前面的值已经以键值对的形式存进表内),O(1)。

3.哈希表

(刚开始束手无措是因为之前没认真学哈希表,在这里简单写一下就当复习了。)

3.1 核心容器

unordered_map 存储键值对
unordered_set 仅存储键
键不可重复,值可以重复

3.2 基本操作

1、插入:hashtable[key] = value
2、查找

auto it=hash.find(key);
if(it!=hash.end())
{cout<<it->second<<endl;// it->first是key,it->second是value
}   
else {cout<<not found<<endl;}

3、删除
1、通过键删除: hash.erase(key)
2、通过迭代器删除
auto it=hash.find(key); if(it!=hash.end()) hash.erase(it);
4、遍历:for(auto it=hash.begin();it!=hash.end();it++)
5、大小:hash.size()
6、清空:hash.clear()
7、判空:hash.empty()
8、是否存在某个键:hash.count(key)
注意:哈希表的插入、查找、删除操作的时间复杂度都是O(1)

http://www.hskmm.com/?act=detail&tid=27785

相关文章:

  • python-Zipfile模块-常用代码
  • Elasticsearch 备份:方案篇
  • 307、出塞
  • 2025 年刑事辩护律师/看守所会见律师/取保候审律师推荐:徐义明律师的实务经验与南京华商律所服务体系解析
  • 详细介绍:C#的MVVM架构中的几种数据绑定方式
  • 质量检验知识专题讲座之八:过程检验
  • 质量检验知识专题讲座之六:抽样检验步骤
  • 羡慕线段树
  • 质量检验知识专题讲座之七:来料检验
  • windows 10分区教程,win10自带分区教程
  • # Python 类中方法类型详解
  • 决斗(模拟赛题目T3)分析
  • 大学C语言课摸鱼记
  • gitlen中,已经提交了内容,如何回退到修改前?
  • CF1989F
  • 2025.10.10——1绿
  • Vue3水波纹指令:2025年Material Design交互新标准 - 实践
  • 巨型飞机运输风力涡轮机叶片技术解析
  • CCPC2024女生专场 游记(VP)
  • 重磅福利,JetBrains 宣布 DataGrip 面向非商业用途免费!
  • 【GitHub每日速递 251010】Zen MCP:一键 orchestrate 多 AI 模型,代码开发协作新革命!
  • 22 LCA模拟赛2T1 奶龙与贝利亚 题解
  • 微软拼音输入法自定义短语批量导入导出工具(支持Windows 10/11)
  • AI风险管控新规应对系统抵抗关闭行为
  • BLDC中的Q15
  • 华为 AP hw_manage 离线管理 Wi-Fi 密码
  • 雪落 - L
  • 251009
  • Mybatis笔记
  • PluginMonitor - Typecho 插件监控工具