您的位置:首页 > 其它

Two Sum

2015-09-07 11:01 190 查看


刚拿到提很自然的想到了排序之后首尾指针扫描,但是排序会改变数组原来的位置,因此最终给出的index是错的。网上看来别人的思路之后豁然开朗,可以定义一个结构体,结构体中存放数值和原来的index,之后在=再排序,使用首尾指针,当然排序函数得自己写。

struct Node{
int value;
int pos;
};

bool cmp(Node a,Node b){
return a.value<b.value;
}

class Solution {
public:
vector<int> twoSum(vector<int>&
4000
amp; nums, int target) {
vector<int> retval;
vector<Node> list;

for(int i=0;i<nums.size();i++){
Node tmp;
tmp.value = nums[i];
tmp.pos = i;
list.push_back(tmp);
}
sort(list.begin(),list.end(),cmp);
int left = 0,right = nums.size()-1;
while(left < right){
int sum = list[left].value+list[right].value;
if(sum==target){
if(list[left].pos < list[right].pos){
retval.push_back(list[left].pos+1);
retval.push_back(list[right].pos+1);
}
else{
retval.push_back(list[right].pos+1);
retval.push_back(list[left].pos+1);
}
break;

}
else if(sum < target)
left++;
else
right--;
}
return retval;
}
};运行时间

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息