Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answer in any order.
Example 1:
Input: nums = [2,7,11,15], target = 9 Output: [0,1] Explanation:
Because nums[0] + nums[1] == 9, we return [0, 1]. Example 2:
Input: nums = [3,2,4], target = 6 Output: [1,2] Example 3:
Input: nums = [3,3], target = 6 Output: [0,1]
Constraints:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109 Only one valid answer exists.
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) {vector<int> retnum;for(int i=0;i<nums.size();i++){for(int j=i+1;j<nums.size();j++){if(nums[i]+nums[j]==target){retnum.push_back(i);retnum.push_back(j);return retnum;}}}return retnum; } };
cpp
1234567891011121314151617 解法二:哈希法#include<iostream> #include<unordered_map> #include<vector> using namespace std; vector<int> twosum(vector<int>& nums,int target){unordered_map<int,int> num2;for(int i=0;i<nums.size();i++){auto it = num2.find(target-nums[i]);if(it!=num2.end()){//unordered_map 中find()返回的是位置,如果没有就是map.end()return {it->second,i};}num2[nums[i]]=i;}return {}; } int main(){vector<int> nums={2,7,11,15} ;for(auto i:twosum(nums,9))cout<<i<<endl;return 0; }
cpp
123456789101112131415161718192021
