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; } };