[LeetCode] Two sum
我的第一题
time limit exceeded
O(N*M)
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target)
{
vector<int> ret(2, 0);
int len = numbers.size();
for(int i=0; i<len; i++)
{
for(int j=i+1; j<len; j++)
{
if(numbers[i] + numbers[j] == target)
{
ret[0] = i+1;
ret[1] = j+1;
return ret;
}
}
}
return ret;
}
};
O(N)解法
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target)
{
vector<int> ret(2, 0);
int len = numbers.size();
map<int, int> iimap;
vector<long long> llvec(len, 0);
for(int i=0; i<len; i++)
{
llvec[i] = numbers[i]*(target-numbers[i]);
if(iimap[ llvec[i] ] > 0)
{
if(numbers[ iimap[ llvec[i] ] -1] + numbers[i] == target)
{
ret[0] = iimap[ llvec[i] ];
ret[1] = i+1;
break;
}
}
else
{
iimap[ llvec[i] ] = i+1;
}
}
return ret;
}
};
浙公网安备 33010602011771号