class Solution {// 这种做法找出的是具体的两个数字 但不是数字的下标
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans;
sort(nums.begin(), nums.end());
map<int, int> record;
if (nums.empty()) return ans;
int i = 0;
int j = nums.size()-1;
for (int i = 0; i < nums.size(); i++) {
record[i] = nums[i];
}
while (i < j) {
if (nums[i] + nums[j] == target) {
ans.push_back(nums[i]);
ans.push_back(nums[j]);
return ans;
}
else if (nums[i] + nums[j] < target)
i++;
else
j--;
}
return ans;
}
};
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans;
map<int, int> record;
for (int i = 0; i < nums.size(); i++) {
record[nums[i]] = i;
}
for (int i = 0; i < nums.size(); i++) { // 利用map的性质,key数组中的元素 value为下标, 那么record[nums[i]]就是nums[i]的下标
if (record.count(target - nums[i]) && record[target-nums[i]] != i) {
ans.push_back(i);
ans.push_back(record[target-nums[i]]);
break;
}
}
return ans;
}
};