两数之和(Leetcode)

题目: alt

解法一:暴力法

        int n=nums.size();
        vector<int> ans;
        for(int i=0;i<n;++i)//从头到尾遍历数组
        {
            for(int j=i+1;j<n;++j)//从i的下一个位置开始查找,满足题目输出顺序的要求
            {
                if(nums[i]+nums[j]==target)
                {
                    ans.push_back(i);
                    ans.push_back(j);
                }
            }
        }
        return ans;
    }

最坏的情况是全部元素都需要遍历一遍,因此时间复杂度为O(N^2); 空间使用为常量级别,因此空间复杂度为O(1).

解法二:哈希法

        vector<int> ans;
        unordered_map<int,int> m;//C++11新特性加入的容器,底层为无序哈希表
        for(int i=0;i<nums.size();++i)
        {
            if(m.find(target-nums[i])!=m.end())//find函数如果失败返回为容器末尾迭代器
            {
                ans.push_back(m[target-nums[i]]);
                ans.push_back(i);
            }
            m[nums[i]]=i;
        }
        return ans;
    }

由于使用了哈希表查找,最差的情况是将N个元素放入到哈希表中,然后查找出来的时间只需要O(1),这个函数的时间复杂度为N*O(1),即O(N);

由于哈希表的使用,存入了N个元素,因此空间复杂度为O(N);

Leetcode刷题整合 文章被收录于专栏

都是作者刷到的一些感觉是好题整理到一起的,辛苦整理不易,麻烦给个赞,有疑问请留言

全部评论

相关推荐

frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
点赞 评论 收藏
分享
白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务