题目描述
题解
暴力法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
for(int i=0; i < nums.size(); i++) {
for(int j=i+1; j < nums.size(); j++) {
if((nums[i]+nums[j])==target) {
result.push_back(i);
result.push_back(j);
return result;
}
}
}
return result;
}
};
时间复杂度为 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) {
vector<int> result;
map<int, int>tmp;
for(int i = 0; i < nums.size(); i++) {
tmp[nums[i]] = i;
}
for(int i = 0; i < nums.size(); i++) {
int complement = target - nums[i];
if((tmp.count(complement) != 0) && (tmp[complement] != i)) {
// if((tmp.contains(complement)) && (tmp[complement] != i)) { // C++ 20
result.push_back(i);
result.push_back(tmp[complement]);
return result;
}
}
return result;
}
};
时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( n ) O(n) O(n)。
哈希表法进阶
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
map<int, int>tmp;
for(int i = 0; i < nums.size(); i++) {
int complement = target - nums[i];
if(tmp.count(complement) != 0) {
result.push_back(i);
result.push_back(tmp[complement]);
return result;
}
tmp[nums[i]] = i;
}
return result;
}
};
时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( n ) O(n) O(n)。