解题思路:
(1)使用组合,可惜耗时比较久,笑哭
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> v={0,0};
combination(v, nums, target, 0, 0, 2);
return v;
}
int combination(vector<int> &v, vector<int> &nums, int target, int begin, int index,int k) {
if(k==0) {
if(nums[v[0]]+nums[v[1]]==target) return 1;
else return 0;
}
for(int i=begin;i<nums.size();i++) {
v[index]=i;
if(combination(v,nums,target,i+1,index+1,k-1)==1) return 1;
}
return 0;
}
};
(2)使用unordered_map,减少查询速度,即使错过了第一个,也不会错过第二个
(3)参考网址:https://leetcode.com/problems/two-sum/discuss/13/Accepted-C%2B%2B-O(n)-Solution
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> imap;
for (int i = 0;; ++i) {
auto it = imap.find(target - nums[i]);
if (it != imap.end())
return vector<int> {i, it->second};
imap[nums[i]] = i;
}
}
};