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

LeetCode Hot100 C++ 哈希 1.两数之和

在这里插入图片描述

LeetCode Hot100 C++
1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案

详情:
给定一个整数数组 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]
提示:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

暴力循环:

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

哈希:

可以使用单次循环来解决这个问题,使用哈希记录已经出现过的数字
当循环到某一个数字,就去哈希表查找是否有这个数字,只需要一次循环

class Solution {
public:unordered_map<int,int> hmap;vector<int> twoSum(vector<int>& nums, int target) {for(int i=0;i<nums.size();i++){int sub=target-nums[i];if(hmap.count(sub)!=0){//哈希表有数字则找到答案vector<int> result{i,hmap[sub]};return result;}//没找到则继续,把当前数字记录到哈希表中,因为是要返回索引的hmap[nums[i]]=i;} //为了编译顺利,加一个返回 return vector<int>();  }
};

unordered_map<int, int> 类型,它的赋值方式与传统数组有所不同,它使用键值对来存储数据。在这里 hmap[nums[i]] = i; 是一种典型的赋值方式:

nums[i] 是键,i 是值, hmap[nums[i]] = i; 的意思是:将 nums[i] 作为键,将 i 作为与该键关联的值。如果键 nums[i] 已经存在于hmap中,那么它对应的值将被更新为 i;如果键 nums[i] 不存在,unordered_map 会自动创建一个新的键值对。
在这里插入图片描述

http://www.lryc.cn/news/447563.html

相关文章:

  • Windows下安装Neo4j流程
  • Spring IDEA 2024 自动生成get和set以及toString方法
  • 部署my2sql
  • Android Studio 真机USB调试运行频繁掉线问题
  • 如何通过费曼技巧理解复杂主题
  • Golang优雅关闭gRPC实践
  • Maven笔记(一):基础使用【记录】
  • [vulnhub] Jarbas-Jenkins
  • js设计模式(26)
  • 数据库中, drop、delete与truncate的区别?
  • 2024年项目经理不能错过的开源项目管理系统大盘点:全面指南
  • MATLAB基本语句
  • 委托的注册及注销+观察者模式
  • Jetpack02-LiveData 数据驱动UI更新(类似EventBus)
  • Redis 的 Java 客户端有哪些?官方推荐哪个?
  • 工作笔记20240927——vscode + jlink调试
  • Python | Leetcode Python题解之第433题最小基因变化
  • opengauss使用遇到的问题,随时更新
  • 从环境部署到开发实战:消息队列 RocketMQ
  • 【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版
  • 渗透测试-文件上传绕过思路
  • 等保测评中的密码学应用分析
  • LCR 007. 三数之和
  • 【入门01】arcgis api 4.x 创建地图、添加图层、添加指北针、比例尺、图例、卷帘、图层控制、家控件(附完整源码)
  • STL迭代器标签
  • 容器学习之SparseArray源码解析
  • 信创改造技术介绍
  • 【可见的点——欧拉函数】
  • Maven重点学习笔记(包入门 2万字)
  • 1.分页查询(后端)—— Vue3 + SpringCloud 5 + MyBatisPlus + MySQL 项目系列(基于 Zulu 11)