[LeetCode]problem 1. Two Sum

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}

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

你可能感兴趣的:(找工作,leetcode)