1.两数之和_两个数的和怎么算

1.两数之和_两个数的和怎么算1.两数之和

大家好,又见面了,我是你们的朋友全栈君。

num1

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

 

解法1: 直接的解法,两层循环,O(n2)的时间复杂度。

vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ret;
        for(int i=0 ; i<nums.size() ; ++i)
        {
            for(int j=i+1; j<nums.size(); ++j)
            {
                if(nums[i] + nums[j] == target)
                {
                    ret.push_back(i);
                    ret.push_back(j);
                    return ret;
                }
            }
        }

        return ret;
    }

 

解法2: 想要从两层循环变为一层循环,需要借助外部空间,将数据再保留一份出来。

vector<int> twoSumTwoLoopHash(vector<int>& nums, int target)
    {
        map<int, int> mp;
        vector<int> solution;
        for(int i=0; i<nums.size(); ++i)
            // mp.emplace(std::make_pair(nums[i], i));
            mp[nums[i]] = i;

        for(int i=0; i<nums.size(); ++i)
        {
            if(mp.count(target-nums[i]) != 0 && mp[target-nums[i]] != i)
            {
                solution.push_back(i);
                solution.push_back(mp[target-nums[i]]);
                break;
            }
        }

        return solution;
    }

 

解法3: 解法2将时间复杂度从O(n2)降低到O(n)。还可以将两次for循环减少为一个。

vector<int> twoSumOneLoopHash(vector<int>& nums, int target)
    {
        unordered_map<int, int> mp;
        vector<int> solution(2, -1);

        for(size_t i=0; i<nums.size() ; ++i)
        {
            if(mp.count(target-nums[i]) != 0 && mp[target-nums[i]] != i)
            {
                solution[0] = i;
                solution[1] = mp[target-nums[i]];
                break;
            }
            mp[nums[i]] = i;
        }

        return solution;
    }

 

转载于:https://www.cnblogs.com/jimobuwu/p/9755371.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107272.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解题神器软件下载_解题app哪个好

    解题神器软件下载_解题app哪个好BrokenAuth.&amp;amp;SessionMgmt.InsecureLoginFormslow???medium查看源码跟踪unlock_secret()方法,很简单的逻辑functionunlock_secret(){varbWAPP=&quot;bashupdatekilledmyshells!&quot;vara=b…

    2025年11月26日
    6
  • 大数据采集平台之ZDH_SERVER部署

    大数据采集平台之ZDH_SERVER部署目录项目源码下载源码打包部署运行项目源码数据采集平台管理端https://github.com/zhaoyachao/zdh_web数据采集平台服务https://github.com/zhaoyachao/zdh_serverweb端在线查看http://zycblog.cn:8081/login用户名:zyc密码:123456界面只是为了参考功能,底层的数据采集服务需要自己下载zdh_server部署,服务器资源有限,请手下留情如.

    2022年6月10日
    53
  • 在pycharm中如何使用anaconda环境进行编辑_pycharm中导入pygame

    在pycharm中如何使用anaconda环境进行编辑_pycharm中导入pygame目录一.简单使用二:如何打包工程中的使用到的其他文件(如,excel,cfg等)三.通过pyinstaller打包后的resources,如何找到呢一.简单使用1.在虚拟环境中,添加pyinstallerlib2.将pyinstallertool加入到pycharm的externtool中-D,–onedirCreateaone-fold…

    2022年8月27日
    7
  • qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

    qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

    2021年12月5日
    41
  • pycharm中python版本_如何在pycharm中切换python版本「建议收藏」

    pycharm中python版本_如何在pycharm中切换python版本「建议收藏」由于历史原因,现在的python主要流行的是2.5左右的版本和3.0之后的版本。在实际中,我们也会选择不同的版本,或者随时切换版本。接下来我会介绍如何再pycharm中切换python版本工具/原料pycharm软件python3.3和python2.7两个版本,并且安装好方法/步骤1打开软件会看到,这里有明显的红色提示错误。原因是当前使用的是python3.3,当执行print的时候,打印的文字…

    2022年8月28日
    1
  • FFM模型详解[通俗易懂]

    FFM模型详解[通俗易懂]FM和FFM模型是最近几年提出的模型,凭借其在数据量比较大并且特征稀疏的情况下,仍然能够得到优秀的性能和效果的特性,屡次在各大公司举办的CTR预估比赛中获得不错的战绩。美团点评技术团队在搭建DSP的过程中,探索并使用了FM和FFM模型进行CTR和CVR预估,并且取得了不错的效果。本文旨在把我们对FM和FFM原理的探索和应用的经验介绍给有兴趣的读者。文章参考:【1】文章目录1.FFM模型原理2.FFM模型实现3.FFM模型应用1.FFM模型原理假设一个广告分类的问题,根据用户和广告位相关的.

    2022年6月7日
    81

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号