3/29/2014

Leetcode -- Two Sum

class Solution {
public:
    vector twoSum(vector &numbers, int target) {
        std::vector ret;
        if(numbers.size() < 2) {
            return ret;
        }
       
       
        std::unordered_map > hash;
        for(size_t i = 0; i < numbers.size(); ++i) {
            int number = numbers[i];
            if(hash.count(number) == 1) {
                hash[number].emplace_back(i);
            } else {
                std::vector index_hash;
                index_hash.emplace_back(i);
                hash.emplace(number, index_hash);
            }
        }
       
        for(size_t i = 0; i < numbers.size(); ++i) {
            int lkup_num = target - numbers[i];
            if(hash.count(lkup_num) > 0) {
                auto& index = hash[lkup_num];

                    for(auto ind: index) {
                        if(ind != i) {
                            ret.emplace_back(i + 1);
                            ret.emplace_back(ind + 1);
                        }
                    }
            }
        }
        return ret;
    }
};

No comments: