自己写的,运行28ms
vector<int> twoSum(vector<int> &numbers, int target) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int i,j;
vector<int> ret;
for (i=0;i<numbers.size();i++)
{
for (j=i+1;j<numbers.size();j++)
{
if (numbers[i]+numbers[j]==target)
{
ret.push_back(i);
ret.push_back(j);
return ret;
}
}
}
return ret;
}
别人的,先排序,运行16ms,内部排序时间应该是O(NlogN),
http://blog.youkuaiyun.com/ju136/article/details/6975666
class node
{
public:
int id;
int value;
public:
node(int a, int b):id(a), value(b){}
friend bool operator < (const node &a, const node &b) { return a.value < b.value;}
};
vector<int> twoSum(vector<int> vs, int target)
{
const int s = vs.size();
vector<int> ret;
vector<node> temp;
for (int i = 0; i < s; ++i)
temp.push_back(node(i+1, vs[i]));
sort(temp.begin(), temp.end());
for (int b = 0, e = s - 1; b < e; )
{
const int v = temp[b].value + temp[e].value;
if (v == target)
{
if (temp[b].id < temp[e].id)
{
ret.push_back(temp[b].id);
ret.push_back(temp[e].id);
}
else
{
ret.push_back(temp[e].id);
ret.push_back(temp[b].id);
}
return ret;
}
else if (v < target)
{
++b;
}
else --e;
}
return ret;
}
别人的,用map,时间也是16ms,因为map是用红黑树实现的,所以快在find算法了。
http://blog.youkuaiyun.com/doc_sgl/article/details/12115067
vector<int> twoSum(vector<int> &numbers, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> res;
int length = numbers.size();
if(length < 2)return res;
map<int,int> mp;
for(int i = 0; i < length; ++i)
mp[numbers[i]] = i;
map<int,int>::iterator it = mp.end();
for(int i = 0; i < length; ++i)
{
it = mp.find(target - numbers[i]);
if(it != mp.end())
{
res.push_back(min(i+1,it->second +1));
res.push_back(max(i+1,it->second +1));
break;
}
}
return res;
}
题目说第一个索引要小于第二个(应该是小于等于),其实,这题当输入只有一个时候同样元素时,比如4,2,5,找8,算会输出同样的1,1。