ʕ·͡ˑ·ཻ ʕ•̫͡• ʔ•̫͡•ཻʕ•̫͡•ʔ•͓͡•ʔ

[1]:两数之和

题目:

https://leetcode-cn.com/problems/two-sum/description/

解题:

直接暴力过的,看了题解之后发现可以用哈希表。

一次哈希速度是最快的。

代码1:

1
2
3
4
5
6
7
8
9
10
11
12
//暴力
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int>a;
for(int i = 0; i < nums.size(); ++i)
for(int j = 0; j < nums.size(); ++j)
if(nums[i] + nums[j] == target && i != j)
a = {i, j};
return a;
}
};

代码2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//一次哈希
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map <int, int> m;
for(int i = 0; i < nums.size(); ++i) {
int t = target - nums[i];
if(m.find(t) != m.end())
return {m[t], i};
else
m[nums[i]] = i;
}
return {};
}
};

代码3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//两次哈希
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map <int, int> m;
for(int i = 0; i < nums.size(); i++) {
m[nums[i]] = i;
}
for(int i = 0 ; i < nums.size(); i++) {
if(m.find(target - nums[i]) != m.end() && m[target - nums[i]] != i)
return {i, m[target - nums[i]]};
}
return {0};
}
};