PS:下面贴的这个代码是二分查找的那个,不是那个用map的我再写一遍吧。
map代码:
#include
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 twoSum(vector &numbers, int target) { 4 sort(numbers.begin(),numbers.end()); 5 int size = numbers.size(); 6 vector 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 (ti)33 {34 result.push_back(i + 1);35 result.push_back(j + 1);36 return result;37 }38 }39 return result;40 }41 };