LeetCode_#1_两数之和 Two Sum_C++题解
1. 两数之和 Two Sum
题目描述
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
You may assume that each input would have exactly one solution, and you may not use the same element twice.
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
自解_暴力法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans(2);
for (int i = 0; i < nums.size() - 1; i++){
for (int j = i + 1; j < nums.size(); j++){
if (nums[i] + nums[j] == target){
ans[0] = i;
ans[1] = j;
return ans;
}
}
}
return ans;
}
};
- 与官方题解1类似,暴力法
- 时间复杂度:\(O(n^2)\),对于每个元素,试图通过遍历数组的其余部分来寻找它所对应的目标元素。
- 空间复杂度:\(O(1)\)
注意
error: control reaches end of non-void function:控制到达非void函数的结尾。即本应带有返回值的函数到达结尾后可能并没有返回任何值本题中有可能找不到目标值,所以需要在循环检测外也返回一个值,否则会出现此错误
- 想要返回vector时,如果是在调用函数内部创建的vector,会出问题。解决方法:将需要返回的vector引用值作为参数传进函数,在函数内部使用引用。而函数类型设置为bool
参考官方题解_map
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int, int> index;
vector<int> ans(2);
for (int i = 0; i < nums.size(); i++){
if (index.find(target - nums[i]) != index.end()){
ans[0] = index.find(target - nums[i]) -> second;
ans[1] = i;
return ans;
}
else{
index.insert(pair<int,int>(nums[i],i));
}
}
return ans;
}
};
- 时间复杂度:\(O(n\log(n))\),将元素与索引放入map,利用map进行查找。由于C++的map是基于红黑树实现的,查找的时间复杂度约为\(\log(n)\),所以时间复杂度为 \(O(n\log(n))\)。
- 空间复杂度:\(O(n)\),所需的额外空间取决于map中存储的元素数量,该表中存储了 \(n\) 个元素,但C++的map基于红黑树实现,该树的一个节点在不保存数据时,占用16字节的空间,包括一个父节点指针,左右孩子指针,还有一个枚举值(标示红黑的,相当于平衡二叉树中的平衡因子),可见,map还是很耗内存的。
参考:C++ map详解
参考官方题解_unordered_map
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> index;
for (int i = 0; i < nums.size(); i++){
auto it = index.find(target - nums[i]);
if (it != index.end()){
return vector{it->second, i};
}
else{
index[nums[i]] = i;
}
}
return vector<int>();
}
};
- 时间复杂度:\(O(n)\),unordered_map查找复杂度\(O(1)\),最坏情况\(O(n)\)
- 空间复杂度:\(O(n)\)
注意
- unordered_map
- C++ 11标准中加入了unordered系列的容器。unordered_map记录元素的hash值,根据hash值判断元素是否相同。
- map相当于java中的TreeMap,unordered_map相当于HashMap。
- 无论从查找、插入上来说,unordered_map的效率都优于hash_map,更优于map;而空间复杂度方面,hash_map最低,unordered_map次之,map最大。
- vector 初始化,可直接用{}包含元素,题目中需要返回的vector可以直接在返回时定义
LeetCode_#1_两数之和 Two Sum_C++题解的更多相关文章
- LeetCode题解001:两数之和
两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- LeeCode:两数之和【1】
LeeCode:两数之和[1] 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2 ...
- LeetCode_001.两数之和
LeetCode_001 LeetCode-001.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输 ...
- leetcode题库练习_两数之和
题目:两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能 ...
- 653. 两数之和 IV - 输入 BST + HashSet
653. 两数之和 IV - 输入 BST 题目描述 题解分析 最简单的方法就是遍历整棵树,找出所有可能的组合,判断是否存在和为 kk 的一对节点.现在在此基础上做一些改进. 如果存在两个元素之和为 ...
- 【LeetCode】1. Two Sum 两数之和
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:two sum, 两数之和,题解,leetcode, 力 ...
- Leetcode1——两数之和 详细解析
Leetcode1--两数之和 题目分类:数组.哈希表的应用 1. 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 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 - ...
随机推荐
- [bzoj 4887] [Tjoi2017]可乐
传送门 Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市 ...
- 【SPOJ】Distinct Substrings
[SPOJ]Distinct Substrings 求不同子串数量 统计每个点有效的字符串数量(第一次出现的) \(\sum\limits_{now=1}^{nod}now.longest-paren ...
- zabbix (8) 自动发现
当主机数量过多时,如果一台一台的添加,估计整个人都要崩溃,而通过自动发现或者自动注册可以大批量的添加主机,并且自动绑定模板,触发器,动作等操作 1.基本配置 (1)创建发现规则 (2)配置规则 效果如 ...
- scp执行报错WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
linux环境执行scp时会遇到报错WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!,如下 [root@subsname home]# scp AAA. ...
- [RK3288] 外接USB设备出现丢数
CPU:RK3288 系统:Android 5.1 主板外接 USB 接口的外设,经常会出现丢数的现象,这种问题在很多 USB 接口的外设上都遇到过,例如:USB读卡器.USB扫描枪等 有一个共同点是 ...
- GO -- 遍历删除 数组 slice
删的继续, 没删的i++
- FLYAI
https://www.flyai.com/d/FacialAge FLYAI 竞赛说明 参加项目竞赛必须实现 model.py 中的predict_all方法,系统才能给出最终分数. 样例代码说明 ...
- Cookie的使用(js-cookie插件)
js-cookie 官方文档 里面就详细的介绍了es5怎么引用,以下是ES6以上的用户 一.安装 npm install js-cookie --save 二.引用 import Cookies fr ...
- 解决一个 MySQL 服务器进程 CPU 占用 100%解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记》[转]
转载地址:http://bbs.chinaunix.net/archiver/tid-1823500.html 解决一个 MySQL 服务器进程 CPU 占用 100%解决一个 MySQL 服务器进程 ...
- VS2015编译GEOS
下载链接:http://trac.osgeo.org/geos/ 1. 打开cmake,加载geos源码和定位geos的工程存放位置: 2.点击configure,会报错,首先设置CMAKE_INST ...