当前位置:网站首页>leetcode1-两数之和
leetcode1-两数之和
2020-11-10 08:39:00 【osc_nfjwhlc1】
题目描述
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法1
暴力枚举
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int length=nums.size();
vector<int> result;
for(int i=0;i<length;i++)
{
for(int j=i+1;j<length;j++)
{
if(target==nums[i]+nums[j])
{
result.push_back(i);
result.push_back(j);
break;
}
}
}
return result;
}
};
思路及算法
最容易想到的方法是枚举数组中的每一个数 x,寻找数组中是否存在 target - x。
当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已经和 x 匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们只需要在 x 后面的元素中寻找 target - x。
复杂度分析
- 时间复杂度:O(N^2)O(N2),其中 NN 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。
- 空间复杂度:O(1)O(1)。
方法2
哈希表
class Solution {
public:
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 {};
}
};
思路及算法
注意到方法一的时间复杂度较高的原因是寻找 target - x 的时间复杂度过高。因此,我们需要一种更优秀的方法,能够快速寻找数组中是否存在目标元素。如果存在,我们需要找出它的索引。
使用哈希表,可以将寻找 target - x 的时间复杂度降低到从 O(N)O(N) 降低到 O(1)O(1)。
这样我们创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。
复杂度分析
- 时间复杂度:O(N)O(N),其中 NN 是数组中的元素数量。对于每一个元素 x,我们可以 O(1)O(1) 地寻找 target - x。
- 空间复杂度:O(N)O(N),其中 NN 是数组中的元素数量。主要为哈希表的开销。
版权声明
本文为[osc_nfjwhlc1]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4312838/blog/4710498
边栏推荐
- Self writing performance testing tool (2)
- Wu Enda's refining notes on machine learning 4: basis of neural network - Zhihu
- CUDA_主机内存
- Prometheus installation configuration
- 图-无向图
- Learning from scratch YoMo series: Opening
- Hong Kong listed companies transfer cards to acquire 42.5% equity of chuangxinzhong and plan to speed up the distribution of marketing services
- 吴恩达《Machine Learning》精炼笔记 4:神经网络基础 - 知乎
- js解决浏览器打印自动分页的问题
- One image can hold 16x16 words! ——Transformers for large scale image scaling recognition (a brief review of ICLR 2021 papers)
猜你喜欢
Several solutions to the problem that selenium webdriver always fails to use click
对于程序员,那些既陌生又熟悉的计算机硬件
Explanation of Z-index attribute
港股上市公司移卡收购创信众42.5%股权 谋划加快营销服务布局
jmeter接口测试--带有token的解决方法
初级工程师如何在职场生存
[paper reading notes] a multilayered informational random walk for attributed social network embedding
利用尾巴作为时间序列进行处理来识别鲸鱼
浅谈字节最新开源联邦机器学习平台Fedlearner
[论文阅读笔记] RoSANE, Robust and scalable attributed network embedding for sparse networks
随机推荐
[论文阅读笔记] RoSANE, Robust and scalable attributed network embedding for sparse networks
港股上市公司移卡收购创信众42.5%股权 谋划加快营销服务布局
Seam engraving algorithm: a seemingly impossible image size adjustment method
One image can hold 16x16 words! ——Transformers for large scale image scaling recognition (a brief review of ICLR 2021 papers)
分布式文档存储数据库之MongoDB索引管理
[elixir! #0073] beam 内置的内存数据库 —— ETS
Ineuos industrial interconnection platform, web configuration (ineuview) increases the function of importing and exporting engineering views, as well as optimization and repair. Release: v3.2.1
Mongodb index management of distributed document storage database
接缝雕刻算法:一种看似不可能的图像大小调整方法
lodash.js Source code flatten
delete、truncate、drop 有什么区别,误删数据怎么办
编码风格:Mvc模式下SSM环境,代码分层管理
CUDA_主机内存
实验2
[Python learning manual notes] 001. Preface to Python
Can't find other people's problem to solve
C++ exception implementation mechanism
Gets the property value of a column in the list collection object
Use call, apply and bind to solve the annoying this in JS, this in event binding and parameter passing
leetcode之最后一个单词的长度