面试经典算法题69-两数之和
面试经典算法题69-两数之和
公众号:阿Q技术站
LeetCode.1
问题描述
给定一个整数数组 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]
思路
暴力解法:
-
遍历数组中的每个元素,并对每个元素再次遍历剩下的元素,检查它们的和是否等于目标值
target。 -
时间复杂度是 O(n^2),其中 n 是数组的长度。
哈希表解法:
- 创建一个哈希表,用于存储数组中的每个元素及其对应的下标。
- 遍历数组,对于每个元素,计算出目标值与该元素的差值,并检查这个差值是否存在于哈希表中。
- 如果存在,说明找到了两个数,它们的和等于目标值,返回这两个数的下标。
- 否则,将当前元素及其下标存入哈希表,继续遍历。
- 时间复杂度是 O(n),其中 n 是数组的长度,因为每个元素最多只需遍历一次。
参考代码
C++
#include <iostream>
#include <vector>
#include <unordered_map>using namespace std;// 在数组中查找和为目标值的两个数的下标
vector<int> twoSum(vector<int>& nums, int target) {// 创建一个哈希表,键为数组中的元素,值为元素的下标unordered_map<int, int> numMap;// 遍历数组for (int i = 0; i < nums.size(); ++i) {// 计算目标值与当前元素的差值int complement = target - nums[i];// 检查差值是否存在于哈希表中if (numMap.find(complement) != numMap.end()) {// 如果存在,返回差值的下标和当前元素的下标return {numMap[complement], i};}// 将当前元素及其下标存入哈希表numMap[nums[i]] = i;}// 如果没有找到符合条件的两个数,返回空数组return {};
}int main() {// 示例输入vector<int> nums1 = {2, 7, 11, 15};int target1 = 9;vector<int> nums2 = {3, 2, 4};int target2 = 6;vector<int> nums3 = {3, 3};int target3 = 6;// 调用函数并输出结果vector<int> result1 = twoSum(nums1, target1);cout << "输入:nums = [2,7,11,15], target = 9" << endl;cout << "输出:[" << result1[0] << "," << result1[1] << "]" << endl;vector<int> result2 = twoSum(nums2, target2);cout << "输入:nums = [3,2,4], target = 6" << endl;cout << "输出:[" << result2[0] << "," << result2[1] << "]" << endl;vector<int> result3 = twoSum(nums3, target3);cout << "输入:nums = [3,3], target = 6" << endl;cout << "输出:[" << result3[0] << "," << result3[1] << "]" << endl;return 0;
}
Java
import java.util.HashMap;
import java.util.Map;public class TwoSum {// 在数组中查找和为目标值的两个数的下标public static int[] twoSum(int[] nums, int target) {// 创建一个哈希表,键为数组中的元素,值为元素的下标Map<Integer, Integer> numMap = new HashMap<>();// 遍历数组for (int i = 0; i < nums.length; i++) {// 计算目标值与当前元素的差值int complement = target - nums[i];// 检查差值是否存在于哈希表中if (numMap.containsKey(complement)) {// 如果存在,返回差值的下标和当前元素的下标return new int[] { numMap.get(complement), i };}// 将当前元素及其下标存入哈希表numMap.put(nums[i], i);}// 如果没有找到符合条件的两个数,返回空数组return new int[] {};}public static void main(String[] args) {// 示例输入int[] nums1 = { 2, 7, 11, 15 };int target1 = 9;int[] nums2 = { 3, 2, 4 };int target2 = 6;int[] nums3 = { 3, 3 };int target3 = 6;// 调用函数并输出结果int[] result1 = twoSum(nums1, target1);System.out.println("输入:nums = [2,7,11,15], target = 9");System.out.println("输出:[" + result1[0] + "," + result1[1] + "]");int[] result2 = twoSum(nums2, target2);System.out.println("输入:nums = [3,2,4], target = 6");System.out.println("输出:[" + result2[0] + "," + result2[1] + "]");int[] result3 = twoSum(nums3, target3);System.out.println("输入:nums = [3,3], target = 6");System.out.println("输出:[" + result3[0] + "," + result3[1] + "]");}
}
Python
def two_sum(nums, target):# 创建一个字典,键为数组中的元素,值为元素的下标num_map = {}# 遍历数组for i, num in enumerate(nums):# 计算目标值与当前元素的差值complement = target - num# 检查差值是否存在于字典中if complement in num_map:# 如果存在,返回差值的下标和当前元素的下标return [num_map[complement], i]# 将当前元素及其下标存入字典num_map[num] = i# 如果没有找到符合条件的两个数,返回空数组return []# 示例输入
nums1 = [2, 7, 11, 15]
target1 = 9
nums2 = [3, 2, 4]
target2 = 6
nums3 = [3, 3]
target3 = 6# 调用函数并输出结果
print(f"输入:nums = {nums1}, target = {target1}")
print(f"输出:{two_sum(nums1, target1)}")print(f"输入:nums = {nums2}, target = {target2}")
print(f"输出:{two_sum(nums2, target2)}")print(f"输入:nums = {nums3}, target = {target3}")
print(f"输出:{two_sum(nums3, target3)}")
相关文章:
面试经典算法题69-两数之和
面试经典算法题69-两数之和 公众号:阿Q技术站 LeetCode.1 问题描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。…...
在 Spring 框架中,循环依赖是指两个或多个 Bean 之间相互依赖
在 Spring 框架中,循环依赖是指两个或多个 Bean 之间相互依赖,形成一个闭环。例如,Bean A 依赖于 Bean B,而 Bean B 又依赖于 Bean A。这种情况如果不加以处理,会导致 Bean 无法正确实例化,从而引发应用程序…...
一文带你入门Flink CDC
1 CDC简介 1.1 什么是CDC CDC是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。 1.2 CDC的种类 CDC主要…...
修复jenkins SSH 免密登录发布服务器
SSH 免密登录配置和修复步骤: 1. 配置 SSH 免密登录 在本地主机执行以下命令,将公钥复制到目标服务器: ssh-copy-id bjpark172.27.xx.xx输入密码完成公钥传输。 2. 修复 SSH 免密登录失败的权限问题 如果免密登录失败,用root…...
049_python基于Python的热门微博数据可视化分析
目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…...
中国信通院联合中国电促会开展电力行业企业开源典型实践案例征集
自2021年被首次写入国家“十四五”规划以来,开源技术发展凭借其平等、开放、协作、共享的优秀创作模式,正持续成为推动数字技术创新、优化软件生产模式、赋能传统行业转型升级、助力企业降本增效的重要引擎。电力是国民经济的重要基础性产业,…...
LOAM 20.04 ros1安装
LOAM 安装 LOAM源码 安装参考 上述安装参考在 报错1、 C标准改为17 解决方案 数据集 试车实验...
Pyqt5设计打开电脑摄像头+可选择哪个摄像头(如有多个)
目录 专栏导读库的安装代码介绍完整代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文…...
mysqldump 批量导出数据库表
先查询需要导出的数据表,使用语句 SELECT table_name FROM information_schema.tables WHERE table_schema 数据库名 AND table_name LIKE mall%; 再批量导出查询到的表 mysqldump -u root -p test_yogasala mall_ad mall_address mall_admin mall_cart mall_…...
前端工程师面试题整理
前言 本文整理了一系列前端工程师面试中常见的 HTML、CSS 和 JavaScript 问题及其答案,涵盖基础知识、常见问题及面试技巧。适用于准备前端开发职位面试的候选人参考。 目录 前言HTML & CSS1. 对 WEB 标准以及 W3C 的理解与认识2. XHTML 和 HTML 有什么区别3.…...
Linux 权限的理解
内容摘要 本文内容包括shell的运行原理,包括外壳程序的原理、理解、和意义,以及从两个方面对于权限的理解(人和事物的属性)、修改文件的权限,包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用…...
『完整代码』按钮开关UI界面
创建按钮Button 作为开关坐骑UI界面的按钮 创建Image 作为坐骑UI界面 在父类脚本添加其中函数即可 绑定脚本在父类窗口对象 在按钮上响应事件 隐藏UI界面 运行项目 - 实现点击按钮开关UI界面 再次点击按钮 - 关闭UI界面 end...
梦结束的地方 -- 爬楼梯
梦结束的地方 — 爬楼梯 力扣70 : 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例如下: 何解? 最后要爬上楼顶,无非两种上法,最后一…...
身份证识别JAVA+OPENCV+OCR
一、相关的地址 https://github.com/tesseract-ocr/tessdata Releases - OpenCV opencv要装好,我装的是4.5.3的,最新版的没试过。 tessdata就下载了需要用的。好像还有best和fast的版本,我试了一下报错,不知道是不是版本不支持…...
独立开发者如何利用AI实现高收入
引言 在探索独立开发领域时,AI技术的出现为开发者打开了新世界的大门。本文将分享如何利用AI技术提高开发效率,实现更高的收入。 AI在编程中的应用 AI技术的快速发展为独立开发者带来了前所未有的机遇。通过使用AI,我们可以: …...
Go第三方框架--gorm框架(一)
前言 orm模型简介 orm模型全称是Object-Relational Mapping,即对象关系映射。其实就是在原生sql基础之上进行更高程度的封装。方便程序员采用面向对象的方式来操作数据库,将表映射成对象。 这种映射带来几个好处: 代码简洁:不用…...
ONLYOFFICE文档8.2:开启无缝PDF协作
ONLYOFFICE 开源办公套件的最新版本新增约30个新功能,并修复了超过500处故障。 什么是 ONLYOFFICE 文档 ONLYOFFICE 文档是一套功能强大的文档编辑器,支持编辑处理文档、表格、幻灯片、可填写的表单和PDF。可多人在线协作,支持插件和 AI 集…...
内网python smtplib用ssh隧道通过跳板机发邮件
Python 自带 smtplib 包可以发邮件,示例见 [1,2],在邮箱设置启用 IMAP/POP3 就能用。有些邮箱需要设置授权码,如新浪、163 邮箱,然后以授权码作为 smtplib 登录服务器的密码。邮箱端配置参考 [3,4]。 现在情况是: 邮…...
基于C#开发游戏辅助工具的Windows底层相关方法详解
开发游戏辅助工具通常需要深入了解Windows操作系统的底层机制,以及如何与游戏进程进行有效交互。本文将基于C#语言,从Windows底层方法的角度来详细讲解开发游戏辅助工具的相关技术和概念。 一、游戏辅助工具的基本概述 游戏辅助工具,通常被称…...
SSRF+Redis进行内网渗透
SSRFRedis进行内网渗透 一 环境搭建 准备一台服务器,开启了lampp以及redis,redis只允许内网访问 把上面这个注释放开后,redis就只能内网访问 启动redis 使用kali进行端口扫描,扫不到6379端口 kali连接不上redis ssrf漏洞代码 &…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
