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 里面是属于 ...
随机推荐
- 牛客周赛 Round 77
题目链接:牛客周赛 Round 77 A. 时间表 tag:签到 B. 数独数组 tag:签到 Description:给定n个数,每个数的范围为1-9,问能否经过排列,使其每个长度为9的连续子数组都 ...
- 使用xtrabackup对MySQL8.0.34进行备份和恢复
Percona XtraBackup 是一款开源的.用于 MySQL 和 MariaDB 的热备份工具,它可以在不停止数据库服务的情况下进行全量或增量备份,并且能够快速恢复数据.以下从特点.安装.备份 ...
- 解决云电脑无法使用本地终端连接的USB设备
本文分享自天翼云开发者社区<解决云电脑无法使用本地终端连接的USB设备>,作者:2****m 云计算技术的广泛应用已经改变了我们对计算资源的使用方式.云电脑作为云计算的一个重要应用场景,提 ...
- Pyinstaller打包工具
本篇博客主要介绍的是pyinstaller在windows下的基本使用和基础避坑 在windows中使用pyinstaller工具打包时会出现一个问题,在打包列表会看到这样的警告信息: django. ...
- [阿里DIN] 模型保存,加载和使用
[阿里DIN] 模型保存,加载和使用 0x00 摘要 Deep Interest Network(DIN)是阿里妈妈精准定向检索及基础算法团队在2017年6月提出的.其针对电子商务领域(e-comme ...
- Python构建包、上传包详细步骤
1.从git上拉取最新的代码 2.在当前项目目录中创建setup.py文件 setup.py 1 # coding: utf-8 2 3 """打包 4 " ...
- QT5笔记: 35. QGraphicsView 视图
 三者关系:View中可以有多个Scene,Scene放在Vi ...
- mysql数据库表如何设计
单表数据量 所有表都需要添加注释,数据量建议控制在3000万以内 不保存大字段数据 不在数据库中存储图片.文件等大数据 表使用规范 拆分大字段和访问频率低的字段,分离冷热数据 单表字段数控制在 20 ...
- 傻妞教程——如何获取天行数据服务的Key
在傻妞插件列表中,比如油价查询.舔狗语录等需要申请天行KEY,才能使用 1.打开 天行数据官网注册登录 2.在控制台首页完成实名认证 3.在左侧数据管理里面获取你的秘钥Key 4.回到傻妞已安装的插件 ...
- 大数据之路Week08_day02 (Flume的使用举例(从控制台输入数据,从本地打数据到HDFS,从java代码中进行捕获打入到HDFS,flume监控http source))
在使用之前,提供一个大致思想,使用Flume的过程是确定scource类型,channel类型和sink类型,编写conf文件并开启服务,在数据捕获端进行传入数据流入到目的地. 实例一.从控制台打入数 ...