[LeetCode #1] Two Sum

1. Two Sum

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.

Example:

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

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

 解法一: brute force

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target) {
    int *ret = NULL; 
    for (int i = 0; i < numsSize; i++){
        for (int j = i + 1; j < numsSize; j++){
            if ((nums[i] + nums[j] == target)){
                ret = (int *) malloc(2 * sizeof(int));
                ret[0] = i;
                ret[1] = j;
                break;
            }
        }
    }
    return ret;
}

解法二: hash table

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> map;
        vector<int> ret;
        for (int i = 0; i < nums.size(); i++){
            int complement = target - nums[i];
            if (map.count(complement)){
                ret.push_back(map[complement]);
                ret.push_back(i);
                break;
            }
            map[nums[i]] = i;
        }
        return ret;
    }
};
原文地址:https://www.cnblogs.com/amadis/p/5899229.html