[LeetCode]problem 1. Two Sum

来源:互联网 发布:离线翻译软件 知乎 编辑:程序博客网 时间:2024/05/01 12:49

TAG

找相加为特定和的两个数HashTable

题目链接

方法

真是智障.

只想到3sum了,由于要返回索引,又看到HashTable,于是用unordered_map来预先存所有数的索引,再来用双指针找… 结果发现有重复值,又改用unordered_multimap,感觉已经是无所不用其及。

看了DISCUSSAccepted C++ O(n) Solution,其实只需要用map来存已经找过的数,用目标值减去当前值,看差值是否在已经找过的数中。如果在,那就是了。这样才是正解啊。上面的解法就是傻逼。

代码

class Solution {public:    vector<int> twoSum(vector<int>& nums, int target) {        unordered_map<int,size_t> val2pos;        for(int i = 0 ; i < nums.size(); ++i)        {            int anotherVal = target - nums[i];            if(val2pos.count(anotherVal))            {                return {val2pos[anotherVal], i};            }            else            {                val2pos[nums[i]] = i ;            }        }        return {};    }};

后记

记一下,三元运算符下不能直接返回vector字面值形式:

    return 1 ? {1,2} : {3,4}

会编译报错。没有找到原因…

0 0
原创粉丝点击