Given an array of integers, return indices of the two numbers such that they add up to a specific target.
Example:
Given nums = [2, 7, 11, 15], target = 9,
?
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
int* twoSum(int* nums, int numsSize, int target)
{
int *index = (int*)malloc(2*sizeof(int));
int i,j;
for(i=0; i<numsSize-1; i++)
for(j=i+1; j<numsSize; j++)
{
if(nums[i] + nums[j] == target)
{
*index = i;
*(index+1) = j;
}
}
?
return index;
}
出现的报错:最开始是用int index[2]建立数组的,没有通过编译。
class Solution
{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int> index;
int i,j;
for(i=0; i<nums.size()-1; i++)
for(j=1; j<nums.size(); j++)
{
if(nums[i] + nums[j] == target)
{
index.push_back(i);
index.push_back(j);
}
}
return index;
}
};
以上的brute force方法为?的复杂度,利用HashMap可以实现?的复杂度。
具体思路就是,遍历第一遍的时候建立HashMap,第二遍的时候,遍历到的每一个数用target作差,然后看看HashMap里面有没有对应的元素。 ?
class Solution
{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int, int> m;
vector<int> result;
// one pass: build Hashmap
for(int i=0; i<nums.size(); i++)
m[nums[i]] = i;
//second pass: check
for(int i=0; i<nums.size(); i++)
{
int r = target - nums[i];
if( m.count(r) && m[r]!=i )
{
result.push_back(i);
result.push_back(m[r]);
break;
}
}
return result;
}
原文:https://www.cnblogs.com/jenny1000000/p/10957982.html