1. 两数之和

https://leetcode-cn.com/problems/two-sum/

解法一:哈希表

利用hashmap迅速查找,一遍遍历,填充map的同时进行比对判断。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int, int> hash;
        vector<int> result;
        for(int i = 0; i < nums.size(); i++){
            int num_to_find = target - nums[i];//要找的数
            map<int, int>::const_iterator iter = hash.find(num_to_find);
            //若iter访问到end,说明没找到
            if(iter != hash.end()){
                result.push_back(i);
                result.push_back(iter->second);
                return result;
            }
            hash[nums[i]] = i;
        }
    }
};

py:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hash = {}
        for i, val in enumerate(nums):
            #每次应该先找,再填hash,避免“找自己”,即target-val == val的情况
            if target - val in hash:
                return [i, hash[target-val]]
            hash[val] = i

js:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    hash = new Map()
    n = nums.length
    for (let i = 0; i < n; i++) {
        val = nums[i]
        if (hash.get(target - val) !== undefined) {
            return [i, hash.get(target - val)]
        }
        hash.set(val, i)
    }
};

最后更新于