描述
给出一个数组和一个目标值,求出数组中两个数的序列,使得这两个数加起来的和为目标值
解决
利用multimap存数组中值的位置,然后利用sort排序,从左到右遍历查找,利用lower_bound(),复杂度为O(nlgn).
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans(2, 0);
multimap<int, int> pos;
int lenth = nums.size();
for (int i = 0; i < lenth; ++i){
pos.insert(make_pair(nums[i], i));
}
sort(nums.begin(), nums.end());
for (int i = 0; i < lenth; ++i){
int* add = lower_bound(&nums[i], &nums[i] + lenth - i, target - nums[i]);
if (*add + nums[i] == target){
if (*add != nums[i]){
ans[0] = pos.find(nums[i]) -> second;
ans[1] = pos.find(*add) -> second;
return ans;
}
if (*add == nums[i]){
auto m = pos.find(*add);
ans[0] = m -> second;
++m;
ans[1] = m -> second;
return ans;
}
}
}
return ans;
}
};