[LeetCode]Two Sum 【Vector全局指针的使用】

无序数组返回两个元素和为给定值的下标。

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;
    }
};


原文地址:https://www.cnblogs.com/wzzkaifa/p/7141088.html