leetcode001 两数之和
问题描述:两数之和
给定一个整数数组 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] - 解释:
nums[1] + nums[2] == 6,返回[1, 2]。
示例 3
- 输入:
nums = [3,3], target = 6 - 输出:
[0,1] - 解释:
nums[0] + nums[1] == 6,返回[0, 1]。
约束条件
2 <= nums.length <= 10⁴-10⁹ <= nums[i] <= 10⁹-10⁹ <= target <= 10⁹- 只会存在一个有效答案
进阶要求
你能想出一个时间复杂度小于 O(n²) 的算法吗?
解法思路
1. 暴力枚举(Brute Force)
- 时间复杂度: O(n²)
- 空间复杂度: O(1)
- 思路:
- 使用双重循环,遍历所有可能的两个数的组合。
- 检查它们的和是否等于
target,如果找到则返回下标。
2. 哈希表优化(Optimal Solution)
- 时间复杂度: O(n)
- 空间复杂度: O(n)
- 思路:
- 使用哈希表(如
unordered_map)存储{value: index}。 - 遍历数组,对于每个元素
nums[i],计算complement = target - nums[i]。 - 检查
complement是否在哈希表中:- 如果存在,直接返回
{map[complement], i}。 - 否则,将当前
nums[i]存入哈希表。
- 如果存在,直接返回
- 使用哈希表(如
代码实现
暴力枚举(C++)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
// 暴力枚举
for(int i = 0; i < nums.size(); i++){
for(int j = i + 1; j < nums.size(); j++){
if(nums[i] + nums[j] == target){
return {i, j};
}
}
}
return {}; // 理论上题目保证有解,但最好添加默认返回值
}
};
哈希表优化(C++)
总结
| 方法 | 时间复杂度 | 空间复杂度 | 适用情况 |
|---|---|---|---|
| 暴力枚举 | O(n²) | O(1) | 数据量较小 |
| 哈希表优化 | O(n) | O(n) | 数据量较大 |
推荐使用哈希表优化解法,因为它显著降低了时间复杂度,适用于较大的输入规模。
leetcode001 两数之和的更多相关文章
- LeetCode_001.两数之和
LeetCode_001 LeetCode-001.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输 ...
- 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
题目:给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X 思路一: 1,先采用归并排序对这个数组排序, 2,然后寻找相邻<k,i>的两数之和sum,找到恰好sum>x的 ...
- LeetCode 170. Two Sum III - Data structure design (两数之和之三 - 数据结构设计)$
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
- LeetCode 371. Sum of Two Integers (两数之和)
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...
- LeetCode 167. Two Sum II - Input array is sorted (两数之和之二 - 输入的是有序数组)
Given an array of integers that is already sorted in ascending order, find two numbers such that the ...
- [LeetCode] Two Sum IV - Input is a BST 两数之和之四 - 输入是二叉搜索树
Given a Binary Search Tree and a target number, return true if there exist two elements in the BST s ...
- [LeetCode] 1. Two Sum 两数之和
Part 1. 题目描述 (easy) Given an array of integers, return indices of the two numbers such that they add ...
- Leetcode(一)两数之和
1.两数之和 题目要求: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重 ...
- 南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数
问题1 用来测试的,就不说了 问题2:中位数附近2k+1个数 给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及 ...
- 两数之和,两数相加(leetcode)
我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...
随机推荐
- Slort pg walkthrough Intermediate window
nmap ┌──(root㉿kali)-[~] └─# nmap -p- -A -sS 192.168.226.53 Starting Nmap 7.94SVN ( https://nmap.org ...
- uni-app之vuex(一)
如何获取到vuex中data的值 uni-app中内置了 vuex 所以可以直接去使用哈. 在项目的跟目录下 创建文件夹store 在store目录下创建index.js index.js目录如下 i ...
- 如何安全发布 CompletableFuture ?Java9新增方法分析
如何安全发布 CompletableFuture ?Java9新增方法分析 本文未经允许禁止转载. JDK9 中对于CompletableFuture做了新的增强,除了超时功能(orTimeout), ...
- AI编程助手带来的洞察和启发——程序员职业的变革
前言 从chatgpt的横空出世到国内大模型的强势崛起, 从AI只会写诗作画到辅助编程, AI作为新质生产力的重要角色逐渐进入各行各业,为行业带来新的可能性. Cursor.通义灵码这类"A ...
- 局域网 yum仓库
有时候在局域网环境中,每台机器上挂载本地镜像充当yum仓库太麻烦. 可以选择局域网一台服务器生成yum仓库,局域网其他服务器通过http协议访问这台服务器的yum仓库. 一.准备 两台虚拟机,其中 A ...
- Amis坑
一.特殊字符 1.输入框.多行输入框输入$s字符默认替换成空. 如调用后端接口的输入框输入123$BB123,实际请求的参数为123,$后面的参数消息 解决办法:如确实需要输入$的话,在$前面加\即可 ...
- C# 深度学习:对抗生成网络(GAN)训练头像生成模型
通过生成对抗网络(GAN)训练和生成头像 目录 通过生成对抗网络(GAN)训练和生成头像 说明 简介 什么是 GAN 什么是 DCGAN 参数说明 数据集处理 权重初始化 生成器 判别器 损失函数和优 ...
- 支付宝AES如何加密
继之前给大家介绍了 V3 加密解密的方法之后,今天给大家介绍下支付宝的 AES 加密. 注意:以下说明均在使用支付宝 SDK 集成的基础上,未使用支付宝 SDK 的小伙伴要使用的话老老实实从 AES ...
- MySQL - [11] InnoDB存储引擎
Page 页.是真正理解InnoDB存储引擎的入口. 一.Page -- 页 1.1.InnoDB 数据页及其结构 为了避免一条一条读取磁盘数据,InnoDB采取页的方式,作为磁盘和内存之间交互的基本 ...
- [爬坑指南] 虚拟机和docker实现下载服务器
现在需要挂梯子下载一批资源,然而我的梯子装在路由器中,openclash只能配置指定的某个设备不走梯子.所以索性就装个虚拟机专门用来下载东西,挂bt.如果需要走梯子,就单独在这个下载机中配置一个廉价梯 ...