红桃J

用心写好每行完美的代码,远比写一堆更有价值

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

PS:下面贴的这个代码是二分查找的那个,不是那个用map的我再写一遍吧。

map代码:

#include<map>
#include<iostream>
#include<vector>

using namespace std;

vector<int> TwoSum(vector<int> numbers, int target)
{
    vector<int> result;
    map<int, int> hmap;
    for (int i = 0; i < numbers.size(); i++)
    {
        int x = target - numbers[i];
        if (hmap.count(x) == 0)
        {
            hmap.insert(pair<int, int>(numbers[i], i));
        }
        else
        {
            int j = hmap[x];
            result.push_back(j + 1);
            result.push_back(i + 1);
            return result;
        }
    }
    return result;
}

int main()
{
    vector<int> a = { 2, 7, 13, 4 };
    vector<int> b = TwoSum(a, 9);
    for (int i = 0; i < 2; i++)
    {
        cout << b[i] << "    ";
    }
}

PS: STL真的很好用啊!!!!

本来这个题呢,是O(n2)但是试了一下,没过,这个在预期内!!然后想到了,查找target-a[i]这种方法,排序要O(nlgn),后来仔细一想,我还要保存排序前的的数组下表,而且这好像也不像算法OJ的考察方式吧。然后找了下答案,最后发现其实和我保存的方式差不多,只不过,别人利用map把search target-a[i] 的时间降到了O(1)时间,这就是用stl的好处。

二分查找代码:

 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int> &numbers, int target) {
 4         sort(numbers.begin(),numbers.end());
 5     int size = numbers.size();
 6     vector<int> result;
 7     for (int i = 0; i < size; i++)
 8     {
 9         int t = target - numbers[i];
10         int p = i + 1; 
11         int r = size - 1;
12         int q = (p+r) / 2;
13         int j = i;
14         while (p <= r)
15         {
16             if (numbers[q] == t)
17             {
18                 j = q;
19                 break;
20             }
21             if (t<numbers[q])
22             {
23                 r = q - 1;
24                 q = (p + r) / 2;
25             }
26             else
27             {
28                 p = q + 1;
29                 q = (p + r) / 2;
30             }
31         }
32         if (j > i)
33         {
34             result.push_back(i + 1);
35             result.push_back(j + 1);
36             return result;
37         }
38     }
39     return result;
40     }
41 };

 

posted on 2015-03-04 17:11  红桃J  阅读(168)  评论(0编辑  收藏  举报