[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]
提示:
2 <= nums.length <= 104-109 <= nums[i] <= 109-109 <= target <= 109- 只会存在一个有效答案
二、题解
2.1 暴力查找
选取数组 nums 中的第一个数 num,用 target 减去,得到 another_num,即 num +another_num = target,在剩余的数中寻找 another_num,如果存在,返回两个数的索引。依次遍历整个数组。
基本思路是这样,但在 “在剩余的数中寻找num2” 这一步,寻找算法的好坏直接影响整体算法的效率。
因为数组中同一个元素不能使用两遍,这就在于 “在剩余的数中寻找num2” 中的 “剩余” 怎么实现了,不能简单地使用 if another_num in nums ,需要将寻找的 num 从查找数组 nums 中剔除,这样查找数组才是剩余的。
外循环确定 num,内循环查找 another_num ,由于内循环从 i+1 开始,保证了查找数组中不包含 num。
但暴力查找效率极低。
2.1.1 Python
def twoSum0(nums, target):for i in range(len(nums)):for j in range(i+1,len(nums)):if nums[i] + nums[j] == target:return [i,j]
2.1.2 C++
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 {};
}
2.1.3 C
int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{for (int i = 0; i < numsSize; ++i) {for (int j = i + 1; j < numsSize; ++j) {if (nums[i] + nums[j] == target) {int* ret = malloc(sizeof(int) * 2);ret[0] = i, ret[1] = j;*returnSize = 2;return ret;}}}*returnSize = 0;return NULL;
}
2.1.4 复杂度分析
-
时间复杂度: O ( N 2 ) O(N^2) O(N2),其中 N N N 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。
-
空间复杂度: O ( 1 ) O(1) O(1)。
2.2 哈希表查找
保持数组中的每个元素与其索引相互对应的最好方法是什么?哈希表。
使用 enumerate() 函数获取 nums 列表元素和对应索引,并将 another_num 及其对应的索引存入字典,在原列表 nums 里遍历 num ,在字典里寻找对应 another_num 。
2.2.1 Python
def twoSum1(nums, target):hashmap = {}for index, num in enumerate(nums):another_num = target - numif another_num in hashmap:return [hashmap[another_num], index]else:hashmap[num] = indexreturn None
2.2.2 C++
vector<int> twoSum(vector<int>& nums, int target)
{unordered_map<int, int> hashtable;for (int i = 0; i < nums.size(); ++i) {auto it = hashtable.find(target - nums[i]);if (it != hashtable.end()) {return {it->second, i};}hashtable[nums[i]] = i;}return {};
}
2.2.3 C
struct hashTable
{int key;int val;UT_hash_handle hh;
};struct hashTable* hashtable;struct hashTable* find(int ikey)
{struct hashTable* tmp;HASH_FIND_INT(hashtable, &ikey, tmp);return tmp;
}void insert(int ikey, int ival)
{struct hashTable* it = find(ikey);if (it == NULL) {struct hashTable* tmp = malloc(sizeof(struct hashTable));tmp->key = ikey, tmp->val = ival;HASH_ADD_INT(hashtable, key, tmp);} else {it->val = ival;}
}int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{hashtable = NULL;for (int i = 0; i < numsSize; i++) {struct hashTable* it = find(target - nums[i]);if (it != NULL) {int* ret = malloc(sizeof(int) * 2);ret[0] = it->val, ret[1] = i;*returnSize = 2;return ret;}insert(nums[i], i);}*returnSize = 0;return NULL;
}
2.2.4 复杂度分析
-
时间复杂度: O ( N ) O(N) O(N),其中 N N N 是数组中的元素数量。对于每一个元素 x,我们可以 O ( 1 ) O(1) O(1) 地寻找
target - x。 -
空间复杂度: O ( N ) O(N) O(N),其中 N N N 是数组中的元素数量。主要为哈希表的开销。
相关文章:
[LeetCode] 1.两数之和
一、题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值 target的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 你可以按任意顺序返回答…...
ruby语言怎么写个通用爬虫程序?
Ruby语言爬虫是指使用Ruby编写的网络爬虫程序,用于自动化地从互联网上获取数据。其中,CRawler是一个基于文本的小型地牢爬虫,它被设计为可扩展,所有游戏数据均通过JSON文件提供,程序仅处理游戏引擎。除此之外ÿ…...
7 交换机与VLAN
1、拓扑结构是怎么形成的? 举例:办公楼里的每一个楼层可能会有几百台机器,显然需要N个交换机。 交换机之间连接起来,就形成一个稍微复杂的拓扑结构2、两台交换机的情形 1.两台交换机连接着三个局域网,每个局域网上都…...
C++指针笔记
一.定义 是什么? 指针就是地址,相当于门牌号。通过 0x0000也可以拿到该地址里的数据, 可是如果每创建一个变量都要去记住地址编号不太方便我们使用数据,所以才有变量。作用? 通过指针(地址)间接访问内存。内存的编号…...
vue中app.use()做了什么
为什么要app.use(参数) 注册组件,且注册的组件全局可用,或在vue原型上添加内容。 use参数需要什么类型的?vue规定:参数要么是对象形式,且必须有install这个方法属性,或者参数为函数。 另外:注…...
【网安AIGC专题11.1】论文12:理解和解释代码,GPT-3大型语言模型学生创建的代码解释比较+错误代码的解释(是否可以发现并改正)
Comparing Code Explanations Created by Students and Large Language Models 写在最前面总结思考 背景介绍编程教育—代码理解和解释技能培养编程教育—解决方案研究问题研究结果 相关工作Code ComprehensionPedagogical Benifis of code explanationLarge Language Models i…...
【GEE】4、 Google 地球引擎中的数据导入和导出
1简介 在本模块中,我们将讨论以下概念: 如何将您自己的数据集引入 GEE。如何将来自遥感数据的值与您自己的数据相关联。如何从 GEE 导出特征。 2背景 了解动物对环境的反应对于了解如何管理这些物种至关重要。虽然动物被迫做出选择以满足其基本需求&am…...
【C++】特殊类设计+类型转换+IO流
🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…...
JAVA整理学习实例(一)面向对象
JAVA整理学习实例(一)面向对象 注:整理一下之前写的东西,然后在修修补补,水平有限,有错误的请指正。 前言 基础部分的面试大部份是理论和一些语法细节,如果平时没有关注,在面试或者做…...
QT 实现解密m3u8文件
文章目录 概要如何解密M3U8文件呢实现思路和代码序列图网络请求解密 结论 概要 视频文件很多已M3U8文件格式来提供,先复习下什么是M3U8文件!用QT的 mutimedia框架来播放视频时,有的视频加载慢,有的视频加载快,为啥&am…...
论文阅读—— BiFormer(cvpr2023)
论文:https://arxiv.org/abs/2303.08810 github:GitHub - rayleizhu/BiFormer: [CVPR 2023] Official code release of our paper "BiFormer: Vision Transformer with Bi-Level Routing Attention" 一、介绍 1、要解决的问题:t…...
理解 fopen的 rwa r+w+a+ 参数含义
tags: C categories: C 理解 一图胜千言 我愿称之为最强 c - Difference between r and w in fopen() - Stack Overflow; 需要注意里面的a和 a, 区别在于 a 不可以读而 a可以读. c - Difference between r and w in fopen() - Stack Overflow; ModeReadWriteCreate New Fil…...
【强化学习】17 ——DDPG(Deep Deterministic Policy Gradient)
文章目录 前言DDPG特点 随机策略与确定性策略DDPG:深度确定性策略梯度伪代码代码实践 前言 之前的章节介绍了基于策略梯度的算法 REINFORCE、Actor-Critic 以及两个改进算法——TRPO 和 PPO。这类算法有一个共同的特点:它们都是在线策略算法,…...
驱动开发11-2 编写SPI驱动程序-点亮数码管
驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/spi/spi.h>int m74hc595_probe(struct spi_device *spi) {printk("%s:%d\n",__FILE__,__LINE__);char buf[]{0XF,0X6D};spi_write(spi,buf,sizeof(buf));return 0; …...
Java使用pdfbox进行pdf和图片之间的转换
简介 pdfbox是Apache开源的一个项目,支持pdf文档操作功能。 官网地址: Apache PDFBox | A Java PDF Library 支持的功能如下图.引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-app</artifactId><version>…...
机器学习中的关键组件
机器学习中的关键组件 数据 每个数据集由一个个样本组成,大多时候,它们遵循独立同分布。样本有时也叫作数据点或数据实例,通常每个样本由一组称为特征或协变量的属性组成。机器学习会根据这些属性进行预测,预测得到的称为标签或…...
【JVM】JDBC案例打破双亲委派机制
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 JVM 打破双亲委派机制(JDBC案例…...
每天五分钟计算机视觉:池化层的反向传播
本文重点 卷积神经网络(Convolutional Neural Network,CNN)作为一种强大的深度学习模型,在计算机视觉任务中取得了巨大成功。其中,池化层(Pooling Layer)在卷积层之后起到了信息压缩和特征提取的作用。然而,池化层的反向传播一直以来都是一个相对复杂和深奥的问题。本…...
Docker的安装、基础命令与项目部署
文章目录 前言一、docker安装与MySQL部署1.Linux环境下docker的安装(1)基于CentOS7(2)基于Ubuntu 二、docker基础1.常见命令(1)快速创建一个mysql容器(MySQL得一键安装)。࿰…...
Nodejs和npm的使用方法和教程
Nodejs简介 Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具! ( 运行环境,是不是很熟悉,对。就是 java JRE,Java 运行时环境) Node.js 在浏览器之外运行 V8 Java…...
OpenClaw+Qwen3.5-9B低成本自动化:自建模型比API省80%
OpenClawQwen3.5-9B低成本自动化:自建模型比API省80% 1. 为什么我要研究OpenClaw的成本问题 上个月我尝试用OpenClaw自动化处理积压的3000多份PDF文件,结果被商用API的账单吓了一跳——单次归档任务的token消耗折算下来居然要12美元。这让我开始思考&a…...
2026年降AI工具价格全面对比:哪款最便宜还好用
2026年降AI工具价格全面对比:哪款最便宜还好用 72%。 我收到知网检测报告那一刻,说实话有点懵。我那篇论文写了快两个月,每个字都是自己敲的。但学校的要求摆在那——AI率低于20%才能送审。折腾了几天之后,靠嘎嘎降AI࿰…...
Spring原理(Bean的生命周期)
一、Bean的作用域Bean 的作⽤域是指 Bean 在 Spring 框架中的某种⾏为模式。⽐如单例作⽤域: 表⽰ Bean 在整个 Spring 中只有⼀份, 它是全局共享的. 那么当其他⼈修改了这个值之后, 那么另⼀个⼈读取到的就是被修改的值作用域说明singleton每个SpringIoc容器内同名称的Bean只有…...
学术党福音:OpenClaw+Qwen3-32B自动生成LaTeX论文图表
学术党福音:OpenClawQwen3-32B自动生成LaTeX论文图表 1. 为什么需要自动化论文图表生成 作为长期与LaTeX搏斗的科研狗,我经历过无数次这样的深夜:在Python里调完matplotlib参数,手动导出PNG,再在LaTeX里反复调整\inc…...
消费级GPU福音:百川2-13B-4bits+OpenClaw自动化测试报告
消费级GPU福音:百川2-13B-4bitsOpenClaw自动化测试报告 1. 为什么选择这个组合? 去年冬天,我盯着显卡监控软件里跳动的显存占用数字,突然意识到一个问题:大多数开源大模型对消费级GPU太不友好了。动辄20GB以上的显存…...
OpenClaw技能开发入门:为Qwen2.5-VL-7B扩展截图分析功能
OpenClaw技能开发入门:为Qwen2.5-VL-7B扩展截图分析功能 1. 为什么需要截图分析技能 上周我在整理项目文档时,突然意识到一个痛点:每次截图后都需要手动添加文字说明,这个过程既耗时又容易出错。作为一个长期关注自动化工具的技…...
音谷 - AI 多角色多情绪配音平台 github开源的多角色、多情绪 AI 配音生成平台,支持小说、剧本、视频等内容的自动配音与导出。
简介说明 音谷 - AI 多角色多情绪配音平台 github开源的多角色、多情绪 AI 配音生成平台,支持小说、剧本、视频等内容的自动配音与导出。 定位:为小说、剧本、视频等内容提供多角色、多情绪的 AI 语音合成与配音服务 主要功能: 小说 / 剧本…...
圆柱电池气动点焊机:高精度焊接新标杆,LangChain 学习 - LangChain 引入(LangChain 概述、LangChain 的使用场景、LangChain 架构设计)。
圆柱电池气动点焊机的技术优势 圆柱电池气动点焊机采用高精度气动加压系统,压力稳定控制在0.2-0.5MPa范围内,配合伺服驱动可实现0.01mm的焊接位置精度。该设备搭载恒流控制逆变焊接电源,输出电流波动小于1%,确保每个焊点电阻值差异…...
自动化视频配音流水线:CosyVoice与AE脚本结合实战
自动化视频配音流水线:CosyVoice与AE脚本结合实战 你是不是也遇到过这样的烦恼?做短视频、录网课,或者给产品做演示视频,自己配音吧,要么普通话不标准,要么声音不好听,要么就是录了好几遍都不满…...
[具身智能-236]:OpenCV ROI:Region of Interest(感兴趣区域)
在 OpenCV 中,ROI 是 Region of Interest(感兴趣区域)的缩写。简单来说,ROI 就是从图像中切出来的“一块”。在处理图像时,我们往往不需要处理整张图片(比如处理人脸时不需要管背景里的树)&…...
