70、【哈希表】leetcode——1. 两数之和(C++版本)
2023-09-11 14:20:01 时间
题目描述
原题链接:1. 两数之和
一、采用Hash表
目标是求两数之和的下标,采用unordered_map
设置Key为求和之值,Value为对应元素下标。每次先查找之前是否有另一个数在存储中,若在则返回答案,若不在则加入到其中。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> record;
for(int i = 0; i < nums.size(); i++) {
auto it = record.find(target - nums[i]);
if(it != record.end()) {
return {it->second, i}; // 找到返回第一个下标和第二个下标
}
// record.insert(pair<int, int>(nums[i], i));
record[nums[i]] = i; // 注意:因为可能出现二倍的数为目标之和,为避免仅有一个数而提前判定已在存储中,因此需要先判定再存储Key-Value。
}
return {}; // 未找到返回{}
}
};
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)
二、排序+双指针
可以下排序,然后再用双指针方式,设置一个首指针,设置一个尾指针,利用数组中的单调性遍历。直至找到nums[i] + nums[j] == target
相关文章
- [C/C++标准库]_[0基础]_[使用fstream合并文本文件]
- C++ 基类指针和子类指针相互赋值
- vs中c++项目的配置
- C++ 排列最优解算法思想
- 《C++ 开发从入门到精通》——1.4 第一个C++程序
- 《21天学通C++(第7版)》——17.7 作业
- 《C++代码设计与重用》——2.8 const关键字的使用
- 187、【栈与队列】leetcode ——42. 接雨水(C++版本)
- 179、【动态规划】leetcode ——115. 不同的子序列(C++版本)
- 167、【动态规划】AcWing ——83. 股票的最大利润 (C++版本)
- 150、【动态规划】leetcode ——96. 不同的二叉搜索树(C++版本)
- 144、【动态规划】leetcode ——509. 斐波那契数:递归法+迭代法(C++版本)
- 141、【贪心算法】leetcode ——56. 合并区间(区间重叠解法+双指针解法)(C++版本)
- 136、【贪心算法】leetcode ——860. 柠檬水找零(贪心策略)(C++版本)
- 133、【贪心算法】leetcode ——1005. K 次取反后最大化的数组和(模拟变化+贪心策略)(C++版本)
- 130、【贪心算法/动态规划】leetcode ——122. 买卖股票的最佳时机 II(C++版本)
- 124、【回溯算法】leetcode ——46. 全排列(C++版本)
- 122、【回溯算法】leetcode ——90. 子集 II:子集去重(C++版本)
- 121、【回溯算法】leetcode ——78. 子集(C++版本)
- 116、【回溯算法】leetcode ——17. 电话号码的字母组合:回溯法:哈希映射+字符串数组映射(C++版本)
- 106、【树与二叉树】leetcode ——501. 二叉搜索树中的众数:双指针法+哈希表法(C++版本)
- 104、【树与二叉树】leetcode ——98. 验证二叉搜索树:递归法[先序+中序+后序]+迭代法(C++版本)
- 85、【栈与队列】leetcode ——150. 逆波兰表达式求值(C++版本)
- 62、【数组】leetcode——54. 螺旋矩阵:N*M型(C++版本)
- 【C++初阶】C++入门(一):命名空间&&C++的输入输出&&缺省参数&&函数重载
- 【C++快速上手】十三、extern学习笔记