码迷,mamicode.com
首页 > 其他好文 > 详细

Two Sum

时间:2014-11-08 00:48:23      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   sp   for   

bubuko.com,布布扣
struct node
{
    int n;
    int value;
};
bool cmp(node a,node b)
{
    return a.value<b.value;
}
class Solution {
public:
    vector<int> twoSum(vector<int> &numbers, int target)
    {
        vector<node> a;
        vector<int> result;
        for(int i=0;i<numbers.size();i++)
        {
            a.push_back(node{i+1,numbers[i]});
        }
        sort(a.begin(),a.end(),cmp);

        for(int i=0;i<a.size();i++)
        {
            int l=0,r=numbers.size();
            int key=target-a[i].value;
            while(l<r)
            {
                int m=l+(r-l+1)/2;
                if(a[m].value==key&&m!=i)
                {
                    result.push_back(a[i].n);
                    result.push_back(a[m].n);
                    sort(result.begin(),result.end());
                    return result;
                }
                if(a[m].value<key)
                    l=m;
                if(a[m].value>key)
                    r=m-1;
            }
        }
    }
};
View Code

对每一个数a,target-a,在原数组中二分查找,这样时间便是nlogn。下标问题可新建一个数组,新存储一个标,这样排序后也能找到原来的下标。

Two Sum

标签:style   blog   http   io   color   ar   os   sp   for   

原文地址:http://www.cnblogs.com/XMJQVRWSD/p/4082545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!