题目背景
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;
}
};
解法二:哈希法
#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;
}