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

leetcode

时间:2015-03-04 18:35:17      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

本来这个题呢,是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 };

 

leetcode

标签:

原文地址:http://www.cnblogs.com/chaiwentao/p/4313836.html

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