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;
}
};运行时间
相关文章推荐
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C#中结构体和字节数组转换实现
- Ruby简明教程之数组和Hash介绍
- C语言查找数组里数字重复次数的方法
- 解析结构体的定义及使用详解
- C语言柔性数组实例详解
- Perl中怎样从数组中删除某个值?
- C语言安全之数组长度与指针实例解析