遍历一遍哈希表: O(n)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> numMap;
for (int i = 0; i < nums.size(); i++)
{
int complement = target - nums[i];
if(numMap.count(complement) && numMap[complement] != i)
return{i, numMap[complement]};
numMap[nums[i]] = i;
}
return {};
}
};
遍历两边遍哈希表: O(n)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> numMap;
int n = nums.size();
// Build the hash table
for (int i = 0; i < n; i++) {
numMap[nums[i]] = i;
}
// Find the complement
for (int i = 0; i < n; i++) {
int complement = target - nums[i];
if (numMap.count(complement) && numMap[complement] != i) {
return {i, numMap[complement]};
}
}
};
穷举法: O(n^2)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++)
{
if ((nums[i] + nums[j]) == target)
return vector<int>{i, j};
}
}
return vector<int>{};
}
};