无序数组返回两个元素和为给定值的下标。
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; } };
时间: 2024-12-28 16:10:57