前言
题目: 1. 两数之和
文档: 代码随想录——两数之和
编程语言: C++
解题状态: 成功解决!
思路
思路一,朴实无华的双循环令人心里一暖。
思路二,哈希表法,使用 m a p map map,计算后查询。先查询后添加的方法实在是耐人寻味。
代码
方法一: 暴力解法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> arr(2, 0);
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++) {
if (nums[i] + nums[j] == target) {
arr[0] = i;
arr[1] = j;
}
}
}
return arr;
}
};
- 时间复杂度: O ( n 2 ) O(n^2) O(n2)
- 空间复杂度: O ( 1 ) O(1) O(1)
方法二: 哈希表
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
std::unordered_map <int, int> map;
for (int i = 0; i < nums.size(); i++) {
auto iter = map.find(target - nums[i]);
if (iter != map.end()) {
return {iter -> second, i};
}
map.insert(pair<int, int>(nums[i], i));
}
return {};
}
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)