[E]Leetcode1-two sum

2017-10-14  本文已影响6人  glassyw

分析:

解法一:最容易想到的暴力搜索,两个循环。
时间复杂度:O(n^2)
解法二:在解法一的基础上优化一些,比如可以用两个指针(head 、tail)从前后往中间搜索。
时间复杂度:O(nlogn)
解法三:用hashmap
时间复杂度:O(n)

C++实现解法三

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        unordered_map<int,int> mymap;
        int res;
        for(int i = 0;i < nums.size();i++)
        {
            res = target - nums[i];
            unordered_map<int,int>::iterator it = mymap.find(res);
            if(it != mymap.end())
            {
                return vector<int>({it->second,i});
            }
            mymap[nums[i]] = i;
        }
    }
};

魔法

这道题形式是a+b=target(a,b未知),在写程序的时候不要限于a+b=target这种形式,换一下式子:
b=target-a
这样在搜索的时候,思考的方式会不一样,程序就变成了,搜索某个值==target。
即:a+b=target -->b=target-a

上一篇 下一篇

猜你喜欢

热点阅读