LeetCode --> Two Sum

来源:互联网 发布:java监听器的作用 编辑:程序博客网 时间:2024/06/16 02:08

Example:

Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].

答案:

#include "stdafx.h"#include <iostream>#include <vector>#include <unordered_map>using namespace std;//原题是满足 数组中两个元素和等于target条件,自己考虑的时候考虑利用两个for循环来做。。。好笨效率超级低啊。。。//参考大牛思考的方法,用target减去数组中元素值,得到差,然后在hash中寻找该差,找到则获取其value值(即:所对应的数组中索引值),并将当前减数的索引值保存到vector中并返回即可。//若未在hash中找到差,则将当前减数与减数对应的索引值保存在hash中。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]; //target - A = B;        //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;}int _tmain(int argc, _TCHAR* argv[]){    vector<int> iv;//  iv.push_back(3);//  iv.push_back(2);//  iv.push_back(4);    iv.push_back(11);    iv.push_back(15);    iv.push_back(2);    iv.push_back(7);    vector<int> res = twoSum(iv, 9);    for (int i = 0; i < res.size(); ++i){        std::cout << res[i] << ' ';    }    std::cout << '\n';    return 0;}
0 0
原创粉丝点击