标签:
本来这个题呢,是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 };
标签:
原文地址:http://www.cnblogs.com/chaiwentao/p/4313836.html