Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
Subscribe to see which companies asked this question.
解析:给出一个数组及一个值,求和为这个值的数组中两个数的索引。
解法1:beat 23.4%
遍历数组,查找n次,在vector中查找target-nums[i],时间复杂度o(n2)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int len=nums.size();
vector<int> arr={};
for(int i=0;i<len;i++){
auto it=find(nums.begin(),nums.end(),target-nums[i]);
if( it!=nums.end()&&it-nums.begin()!=i){
arr.push_back(i);
arr.push_back(it-nums.begin());
break;
}
}
return arr;
}
};
解法二 利用hash表存储每个数组中的值,以target-nums[i]为key,i为value, 边存边查
19 / 19 test cases passed.
Status: Accepted
Runtime: 9 ms
beats 65.4%
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int len=nums.size();
vector<int> arr;
unordered_map<int,int> map;
for(int i =0;i<len;i++){
int restTarget=target-nums[i];
if(map.find(restTarget)!=map.end()){
arr.push_back(map[restTarget]);
arr.push_back(i);
break;
}
map[nums[i]]=i;
}
return arr;
}
};