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)
上一篇 2022年4月20日 下午6:40
下一篇 2022年4月20日 下午6:40


相关推荐

  • Remobjects使用经验

    Remobjects使用经验RemObjectsRemObjects提示:我们相信本文是正确的,但我们不做任何保证.在此感谢Henrick写的文章,很高兴在此发表.介绍RemObjects是功能强大可扩展的远程框架;但是当考虑

    2022年7月1日
    25
  • AGI:走向通用人工智能的【生命学&哲学&科学】第一篇——生命、意识、五行、易经、量子

    AGI:走向通用人工智能的【生命学&哲学&科学】第一篇——生命、意识、五行、易经、量子AGI:走向通用人工智能的【生命学&哲学&科学】第一篇——生命、意识、五行、易经、量子经典的物理统一在原子上,量子的物理统一在量子上,化学统一在元素上,而生命统一在DNA上,DNA本身拆干了,其实就是一群元素,按照经典物理和量子物理所进行的组合。科学本质上是一种经验主义的认识论,属于哲学的一个分支。量子理论,要通过哲学语言,量子属于形而上看不到、摸不着的东西。元气的基本五行,是世界万物的行成与演变的方式。生命的本质是化学,化学的本质是物理,物理的本质用数学描述,数学的本质是由我们的某种语言写出

    2022年6月3日
    39
  • 2025最新Cursor IDE效率指南:使用AI功能提升10倍编程速度【完全攻略】

    2025最新Cursor IDE效率指南:使用AI功能提升10倍编程速度【完全攻略】

    2026年3月16日
    3
  • 计算机模拟需要什么配置电脑,网易MuMu模拟器对电脑配置的最低要求介绍

    计算机模拟需要什么配置电脑,网易MuMu模拟器对电脑配置的最低要求介绍网易 MuMu 模拟器是一款由网易推出的电脑安卓模拟器 今天我们就来讲讲网易 MuMu 模拟器电脑配置要求 下面通过这篇文章给大家讲解一下 希望能帮助到你 MuMu 模拟器最低配置一览操作系统要求需要满足以下操作系统之一 MicrosoftWin 32 SP3Microsoft 32or64bits MicrosoftWin 32

    2026年3月26日
    1
  • Linux crontab定时任务配置方法(详解)

    Linux crontab定时任务配置方法(详解)CRONTAB 概念 介绍 crontab 命令用于设置周期性被执行的指令 该命令从标准输入设备读取指令 并将其存放于 crontab 文件中 以供之后读取和执行 cron 系统调度进程 可以使用它在每天的非高峰负荷时间段运行作业 或在一周或一月中的不同时段运行 cron 是系统主要的调度进程 可以在无需人工干预的情况下运行作业 crontab 命令允许用户提交 编辑或删除相应的作业 每一个用户都可以有一个 crontab 文件来保存调度信息 系统管理员可以通过 cron deny 和 cron allow 这两个文

    2026年3月19日
    2
  • [Webpack并不难]使用教程(一)— entry,devtool,output,resolve

    [Webpack并不难]使用教程(一)— entry,devtool,output,resolve

    2022年3月12日
    45

发表回复

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

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