LeetCode #1 : Two Sum

2017-02-25  本文已影响21人  雒霭

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].


思路蛮简单,将数组双重遍历就好

vector<int> twoSum(vector<int>& nums, int target) {
    vector<int> v;
    for (int i = 0; i < nums.size(); i++) {
        for (int j = i + 1; j < nums.size(); j++) {
            if (nums[i] + nums[j] == target) {
                v.push_back(i);
                v.push_back(j);
            }
        }
    }
    return v;
}

更优解:建立HashMap,对于当前值如果HashMap中有对应解可以直接返回结果,否则将当前数值加入到HashMap中。

vector<int> twoSum(vector<int> &numbers, int target)
{
    //Key is the number and value is its index in the vector.
    unordered_map<int, int> hash;
    vector<int> result;
    for (int i = 0; i < numbers.size(); i++) {
        int numberToFind = target - numbers[i];

            //if numberToFind is found in map, return them
        if (hash.find(numberToFind) != hash.end()) {
                    //+1 because indices are NOT zero based
            result.push_back(hash[numberToFind] + 1);
            result.push_back(i + 1);            
            return result;
        }

            //number was not found. Put it in the map.
        hash[numbers[i]] = i;
    }
    return result;
}
上一篇下一篇

猜你喜欢

热点阅读