leetcode-1.twosum

My solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
for (int i=0;i<nums.size();i++){
for (int j=i+1;j<nums.size();j++){
if (nums[i]+nums[j]==target){
res.push_back(i);
res.push_back(j);
return res;
}
}
}
}
};

time: 181ms

sample 9 ms submission

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class {
public:
vector<int> twoSum(vector<int>& nums, int target) {
using vType = remove_reference_t<decltype(nums)>::size_type;
/*remove_referce_t: ????*/
unordered_map<int,vType> m ;
/*unordered_map uses more memory but is efficient*/
for (int i = 0; i < nums.size(); ++i) {
/*use find target-num[i] to find solution in O(n)*/
const auto it = m.find(target - nums[i]);
if (it != m.end())
return vector<int> {it->second,i};
m.emplace(nums[i],i);
}
throw std::runtime_error("no solutions:") ;
}
};

nuordered_map uses hash, which is more efficient than vector.