[E]Leetcode1-two sum

分析:

解法一:最容易想到的暴力搜索,两个循环。
时间复杂度: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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,355评论 19 139
  • 1酝酿了好久,一直都想写写老头的故事,但总是不敢起头,会有一种担心,就像做其他事情一样,当自己心里越珍重,负担自然...
    凌风阅读 14,787评论 9 15
  • iMindMap是全球首个推出3D视图的思维导图软件,它集结了头脑风暴、演示视图、任务管理等模式的思维导图工具,它...
    wv橙子阅读 786评论 0 0
  • 先生,为什么我那么喜欢你呢?你长的也不帅,但刚好是我喜欢的样子;你又没有多有钱,但刚好拥有能对我好的资本;你又那么...
    无无snow阅读 1,638评论 0 0