C++算法练习-day15——1.两数之和

题目来源:. - 力扣(LeetCode)

题目思路分析

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

思路分析

  1. 暴力解法:最直接的方法是使用两层循环遍历数组,对于每一对元素,检查它们的和是否等于目标值。这种方法的时间复杂度为 O(n^2),在数组较大时效率较低。

  2. 哈希表优化:我们可以利用哈希表(在C++中通常使用unordered_map)来存储数组中的元素及其对应的索引。这样,在遍历数组时,我们可以直接检查 target - nums[i] 是否已经在哈希表中,如果存在,则找到了答案。这种方法的时间复杂度为 O(n),因为每个元素只被遍历一次,哈希表的查找操作平均时间复杂度为 O(1)。

代码:

#include <vector>  
#include <unordered_map>  using namespace std;  class Solution {  
public:  vector<int> twoSum(vector<int>& nums, int target) {  // 创建一个哈希表来存储数组元素及其索引  unordered_map<int,int> hashtable;  int n = nums.size(); // 获取数组长度  // 遍历数组  for(int i = 0; i < n; ++i){  // 计算当前元素需要的配对值  int complement = target - nums[i];  // 在哈希表中查找配对值  auto it = hashtable.find(complement);  // 如果找到了配对值,则返回它们的索引  if(it != hashtable.end()){  return {it->second, i};  }  // 如果没找到,则将当前元素及其索引存入哈希表  hashtable[nums[i]] = i;  }  // 如果没有找到任何配对,返回一个空数组  return {};  }  
};

注释详解

  • unordered_map<int,int> hashtable;:创建一个哈希表,键为数组中的元素值,值为该元素在数组中的索引。
  • int n = nums.size();:获取数组的长度。
  • for(int i = 0; i < n; ++i):遍历数组。
  • int complement = target - nums[i];:计算当前元素需要的配对值,即目标值减去当前元素的值。
  • auto it = hashtable.find(complement);:在哈希表中查找配对值。
  • if(it != hashtable.end()):如果找到了配对值,说明之前已经遍历过一个元素,它的值与当前元素的配对值相等。
  • return {it->second, i};:返回之前元素的索引和当前元素的索引。
  • hashtable[nums[i]] = i;:如果没找到配对值,则将当前元素及其索引存入哈希表。
  • return {};:如果遍历完数组后没有找到任何配对,返回一个空数组。

知识点摘要

  • 哈希表(unordered_map):一种高效的键值对存储结构,支持快速的查找、插入和删除操作。
  • 时间复杂度:哈希表的查找、插入和删除操作平均时间复杂度为 O(1)。
  • 数组遍历:使用循环遍历数组的每个元素。

本文介绍了一种使用哈希表解决“两数之和”问题的高效方法。通过遍历数组并使用哈希表存储已经遍历过的元素及其索引,我们可以在 O(n) 的时间复杂度内找到和为目标值的两个整数及其索引。这种方法不仅提高了效率,而且代码简洁易懂,是处理此类问题的推荐方法。希望这篇文章能帮助你更好地理解并掌握这一算法技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/458085.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端同步异步-setTimeout-Promise-async-await

总结下前端的同步异步、事件循环问题&#xff0c;如有错误欢迎指正。 目录 一、setTimeout定时器函数 1.定义 2.基本语法 3.返回值 4.使用 1&#xff09;异步执行 2&#xff09;嵌套使用 3&#xff09;事件循环 二、Promise 1.定义 2.状态 3.基本语法 1&#xff0…

矩阵概念 和 性质

目录 一、矩阵因式分解 二、矩阵在图形学的运用 一、矩阵因式分解 1、先将矩阵化为上三角阵&#xff0c;得到U 2、每个主元列以下元素 主元 得到下三角阵 二、矩阵在图形学的运用 二维移动&#xff1a; 子空间H&#xff1a; 零向量属于H 对H中任意向量u、v&#xff0c;uv…

js构造函数和原型对象,ES6中的class,四种继承方式

一、构造函数 1.构造函数是一种特殊的函数&#xff0c;主要用来初始化对象 2.使用场景 常见的{...}语法允许创建一个对象。可以通过构造函数来快速创建多个类似的对象。 const Peppa {name: 佩奇,age: 6,sex: 女}const George {name: 乔治,age: 3,sex: 男}const Mum {nam…

利用 Puppeteer-Extra 插件提升自动化测试和网页抓取的效率与隐蔽性

在当今的互联网环境中&#xff0c;自动化测试和网页抓取已经成为许多开发者和数据分析师的日常工作之一。Puppeteer 是一个广泛使用的 Node 库&#xff0c;它提供了一个高级 API 来通过 DevTools 协议控制 Chrome 或 Chromium。然而&#xff0c;在某些场景下&#xff0c;我们可…

获取微博排行榜PHP

获取微博排行榜是获取微博html页面的数据&#xff0c;而非直接调用微博后端接口获取 PHP实现 class WeiBoHotSearchService extends BaseService {/*** 微博热搜缓存过期时间* var int*/protected int $expireTime 600;/*** 微博热搜URL* var string*/protected string $doma…

centos-LAMP搭建与配置(论坛网站)

文章目录 LAMP简介搭建LAMP环境安装apache&#xff08;httpd&#xff09;安装mysql安装PHP安装php-mysql安装phpwind LAMP简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写&#xff1a;Linux操作系统&#xff0c;网页服务器Apache&#xff0c;…

HTML+CSS实现超酷超炫的3D立方体相册

效果演示 HTML和CSS实现一个简单的3D立方体加载动画的相册。它使用了HTML来构建立方体的结构&#xff0c;并通过CSS来添加样式和动画效果。 HTML <div class"loader3d"><div class"cube"><div class"face"><img src&qu…

多线程——线程安全的集合类

目录 前言 一、多线程环境使用 ArrayList 1.进行加锁 2.使用 SynchronizedList 类 3.使用 CopyOnWriteArrayList 类 二、多线程环境使用队列 1.进行加锁 2.使用阻塞队列 三、多线程环境使用哈希表 1.Hashtable 2.ConcurrentHashMap &#xff08;1&#xff09;缩小锁…

计算机毕业设计 | springboot+vue凌云在线阅读平台 线上读书系统(附源码)

1&#xff0c;绪论 随着社会和网络技术的发展&#xff0c;网络小说成为人们茶钱饭后的休闲方式&#xff0c;但是现在很多网络小说的网站都是收费的&#xff0c;高额的收费制度是很多人接受不了的&#xff0c;另外就是很多小说网站都会有大量的弹窗和广告&#xff0c;这极大的影…

医学数据分析中的偏特征图可视化

在医学领域&#xff0c;我们经常需要处理复杂的数据模型&#xff0c;探索特征与目标变量之间的关系。偏特征图(Partial Dependence Plot, PDP)是一种强大的可视化技术&#xff0c;可以帮助我们更好地理解模型的行为。通过这种图形&#xff0c;我们可以直观地观察每个特征对模型…

零一万物新模型Yi-Lightning:超越GPT-4o

10月16日&#xff0c;零一万物发布了最新的旗舰模型Yi-Lightning&#xff08;闪电&#xff09;&#xff0c;在中国大模型中首度超越 GPT-4o。它在国际权威盲测榜单 LMSYS 上取得了显著成绩&#xff0c;超越了硅谷知名 OpenAI 的 GPT-4o-2024-05-13 和 Anthropic Claude 3.5 Son…

关于iPhone 16 Pro评测视频评论区特征的多维度分析

1.项目背景 随着智能手机的迅速发展&#xff0c;消费者在选择新设备时越来越依赖于网络评价和用户反馈&#xff0c;B站作为中国领先的视频分享平台&#xff0c;聚集了大量科技评测内容&#xff0c;其中UP主的评论区成为用户讨论和交流的重要场所&#xff0c;特别是在iPhone 16…

基于SSM的汽车客运站管理系统【附源码】

基于SSM的汽车客运站管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 设计原则 4.2 功能结构设计 4.3 数据库设计 4.3.1 数据库概念设计 4.3.2 数据库物理设计 5 系统实现 5.1 管理员功能实现 5.1.1 管理员信息 5.1.2 车…

【程序员的逆袭】:在失业的阴影下寻找光明

故事摘要 在失业的阴霾中&#xff0c;一位程序员如何通过外包项目重燃希望之火&#xff1f;这个故事讲述了他的谋生手段&#xff0c;如何在压力之下&#xff0c;通过信息差赚取生活所需。 要点 信息的力量&#xff1a;赚钱的关键在于信息差&#xff0c;而非单纯的体力或脑力…

【轻量级聊天应用】Vocechat本地服务器部署结合cpolar异地即时通讯

文章目录 前言1. 拉取Vocechat2. 运行Vocechat3. 本地局域网访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问小结 7. 固定公网地址 前言 本文主要介绍如何在本地群晖NAS搭建一个自己的聊天服务Vocechat&#xff0c;并结合内网穿透工具实现使用任意浏览器远程访问进行智能聊天…

iTerm2 保持SSH远程连接

1、保持SSH远程连接的稳定&#xff0c;防止因闲置时间过长而断开连接 When idle, send ASCII code 35 every 60 seconds每60秒 输入# 2、客户端设置保持活动 设置客户端每隔60秒发送一次保活信号&#xff0c;总共尝试3次。 vim ~/.ssh/configHost *ServerAliveInterval 60…

python csv库

python csv库 水一水又是一篇&#xff0c;乐 读取 import csv # 打开 CSV 文件 with open(example.csv, moder, newline) as file: csv_reader csv.reader(file) # 读取文件头&#xff08;可选&#xff09; headers next(csv_reader) print(f"Headers: {heade…

w001基于SpringBoot的在线拍卖系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

gateway 整合 spring security oauth2

微服务分布式认证授权方案 在分布式授权系统中&#xff0c;授权服务要独立成一个模块做统一授权&#xff0c;无论客户端是浏览器&#xff0c;app或者第三方&#xff0c;都会在授权服务中获取权限&#xff0c;并通过网关访问资源 OAuth2的四种授权模式 授权码模式 授权服务器将授…

【密码学】全同态加密张量运算库解读 —— TenSEAL

项目地址&#xff1a;https://github.com/OpenMined/TenSEAL 论文地址&#xff1a;https://arxiv.org/pdf/2104.03152v2 TenSEAL 是一个在微软 SEAL 基础上构建的用于对张量进行同态加密操作的开源Python库&#xff0c;用于在保持数据加密的状态下进行机器学习和数据分析。 Ten…