[LeetCode] Two Sum

http://oj.leetcode.com/problems/two-sum/

这道题如果第二层循环用二分, 那么时间复杂度是O(nlogn), 而我的做法是哈希表unordered_map, 幸好LeetCode支持C++11.

 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int> &numbers, int target) {
 4         // IMPORTANT: Please reset any member data you declared, as
 5         // the same Solution instance will be reused for each test case.
 6        unordered_map<int, int> m;
 7        for (unsigned int i = 0; i < numbers.size(); ++i) {
 8            m[numbers[i]] = i;
 9        }
10        vector<int> re;
11        for (unsigned int i = 0; i < numbers.size(); ++i) {
12            unordered_map<int, int>::iterator index;
13            if ((index = m.find(target - numbers[i])) != m.end()) {
14                re.push_back(i + 1);
15                re.push_back(index->second + 1);
16                break;
17            }
18        }
19        return re;
20     }
21 };

 

 

posted @ 2013-11-06 00:01  NextLife  阅读(192)  评论(0)    收藏  举报