您的位置:首页 > 其它

Two Sum Leetcode 解法实现

2014-03-22 16:41 316 查看
这道题不难,只要用对工具的话,下面是时间复杂度为o(n)的解法,具体如下:
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
int len = numbers.size();
assert(len >= 2);

vector<int> ret(2, 0);

map<int, int> mapping;              // default all are 0

for(int i=0;i<len;i++)
{

if(mapping[target-numbers[i]])
{
ret[0]=mapping[target-numbers[i]];
ret[1]=i+1;
break;
}
else
{
mapping[numbers[i]]=i+1;
}
}

return ret;
}
};
时间复杂度为o(nlogn)的解法如下所示:

class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
int i,j;
vector<int> a;
int n=numbers.size();
int sum=0;
int flag[100000][2];
for(i=0;i<n;i++)
{
flag[i][0]=numbers[i];
flag[i][1]=i+1;
}

sort(numbers.begin(),numbers.end());

i=0;j=n-1;
while(i<j)
{
sum=numbers[i]+numbers[j];
if(sum>target)
{
j--;
}

else if(sum==target)
{
break;
}

else
{
i++;
}
}

//        printf("%d %d\n",i,j);

int k,p,q,fok1=0,fok2=0,count=0;
for(k=0;k<n;k++)
{
if(count==2) break;
else
{
if(flag[k][0]==numbers[i]&&fok1==0)
{
p=flag[k][1];
count++;
fok1=1;
}
else if(flag[k][0]==numbers[j]&&fok2==0)
{
q=flag[k][1];
count++;
fok2=1;
}
}
}

if(p>q)
{
a.push_back(q);
a.push_back(p);
}
else
{
a.push_back(p);
a.push_back(q);
}
return a;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: