leetcode1.Two Sum

来源:互联网 发布:mac怎么分盘储存文件 编辑:程序博客网 时间:2024/06/07 00:07

Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].//两个指针由两边向中间class Solution {public:    vector<int> twoSum(vector<int>& nums, int target) {        int m=0,n=0;//m用于记录下标,n用于记录找到了几个数,当n为2时,说明已经找到了        vector<int> sorted(nums);//把nums复制给sorted        auto i=sorted.rbegin();        auto j=sorted.rend();        sort(i,j);//对sorted进行由小到大排序        i=sorted.rbegin();        j=sorted.rend();        --j;//i指向sorted的第一个数,即最小数;而j指向sorted的最后一个数,即最大的数        //在sorted数组中找到和为target的两个数        while(i!=j)        {            if(*i+*j==target)                break;            else if(*i+*j<target)//当两数的和小于target时,说明较小的数小,移到下一个                    ++i;                else --j;//否则,大数大,移到前一个        }                vector<int> a;//保存下标的数组        for(auto ai:nums)//遍历nums。找到nums之中的这两个数,然后用m记录下标,            {                if(ai==*i) {a.push_back(m);++n;}                else if(ai==*j) {a.push_back(m);++n;}                ++m;                if(n==2) return a;            }      return a;    }  };


 


             

原创粉丝点击