无序数组返回两个元素和为给定值的下标。
tricks:无序、返回下标增序、返回的是原始数组的下标。
vector<int>*pa;
bool cmp(int x,int y){
return (*pa)[x]<(*pa)[y];
}
class Solution {
public:
vector<int> twoSum(vector<int> &a, int t) {
int n=a.size();
pa=&a;
int* id=new int[n],i=0,j=n-1;
for(i=0;i<n;++i){
id[i]=i;
}
sort(id,id+n,cmp);
for(i=0,j=n-1;i<j;){
if(a[id[i]]+a[id[j]]==t)break;
else if(a[id[i]]+a[id[j]]<t)
++i;
else --j;
}
vector<int>v;
if(id[i]<id[j]){
v.push_back(id[i]+1);v.push_back(1+id[j]);
}
else {v.push_back(1+id[j]);
v.push_back(id[i]+1);
}
delete[]id;
return v;
}
};
本文介绍了一种算法,用于在无序数组中找到两个元素的和等于给定值的下标,并确保返回的下标按递增顺序排列。通过使用双指针技巧和自定义比较函数,实现高效查找过程。
1485

被折叠的 条评论
为什么被折叠?



