思路: 1. 直接暴力两重循环,O()枚举查询即可。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int x, y;
for(int x = 0; x < nums.size()-1; x ++){
for(int y = x+1; y < nums.size(); y ++){
if(nums[x]+nums[y]==target){
return {x, y};
}
}
}
return {x, y};
}
};
2. 利用哈希表,O(1)直接查询 target-num[i]即可,整体时间复杂度O(n)。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int, int> mp;
for(int i = 0; i < nums.size(); i ++){
mp[nums[i]] = i+1;
}
for(int i = 0; i < nums.size(); i ++){
int x = target-nums[i];
if(mp[x]&&mp[x]-1!=i){
return {i, mp[x]-1};
}
}
return {0, 0};
}
};