Leetcode 题解系列--Leetcode1 两数之和

2023-11-17

题目描述

两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

解题思路

解法一:直观的解法,时间复杂度 O ( n 2 ) O(n^2) O(n2)

遍历每个数,然后从下一个位置开始第二次遍历,查找是否存在一个数与当前数的和等于target,如果找到则返回答案。否则将第一层遍历的下标往后挪一位。如果遍历完整个数组都没有找到符合条件的数据,则返回空

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans;
        if(nums.size() <= 1) return ans;
        
        for(int i = 0; i < nums.size(); i++)
            for(int j = i + 1; j < nums.size(); j++)
                if(nums[i] + nums[j] == target) {
                    ans.push_back(i);
                    ans.push_back(j);
                }
        
        return ans;
    }
};
解法二:利用空间换取时间,时间复杂度O(n),空间复杂度O(n)

利用hash表将遍历到的数字和下标存起来,每次遍历到某个数时,先判断target在不在hash中,如果存在,则找到一组答案;如果不在则将当前的数和下标存起来。如果遍历完整个数组还没有找到答案,则返回空

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans;
        if(nums.size() <= 1) return ans;
        
        unordered_map<int, int> hash;
        for(int i = 0; i < nums.size(); i++) {
            if(hash.count(target - nums[i]))  return vector<int>{hash[target - nums[i]], i};
            hash[nums[i]] = i;
        }
        return ans;
        
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode 题解系列--Leetcode1 两数之和 的相关文章

随机推荐

  • rabbitMQ初识

    消息队列 RabbitMQ 认识MQ 同步和异步通讯 微服务间通讯有同步和异步两种方式 同步通讯 就像打电话 需要实时响应 异步通讯 就像发邮件 不需要马上回复 同步通讯 同步调用的优点 时效性较强 可以立即得到结果 同步调用的问题 耦合度
  • C++之多重继承

    大多数应用程序使用单个基类的公用继承 但是在某些情况下 单继承是不够的 必须使用多继承 C 允许为一个派生类指定多个基类 这样的继承结构被称做多重继承 举个例子 交通工具类可以派生出汽车和船连个子类 但拥有汽车和船共同特性水陆两用汽车就必须
  • 使用Android studio开发第一个小程序

    1 点击新建安卓项目 填入项目名称 公司域 项目的修饰 项目路径 若不存在 会新建一个路径 下面两个不要选 点击下一步 2 接下来就是项目配置了 在这里我们只勾选第一个 适配的手机系统最小sdk版本 目前经常用的是API 17 当然你也可以
  • 深入理解浏览器缓存机制 ( http )

    一 介绍 http缓存 浏览器根据当前http请求报文策略 将网路资源存储到本地内存 memory cache 硬盘 disk cache 中 缓存流程 浏览器 浏览器缓存 服务端 发起请求 根据缓存
  • dns服务器经赏要修复,十要诀帮你修复DNS域名解析服务故障

    十个要诀帮你修复DNS故障 1 DNS是网络基础协议之一 想必大家都应该有所了解 对于所有基于Windows系统的网络来说 DNS都属于最重要的服务之一 在没有DNS支持的情况下 活动目录就不能正常工作 并且它使用到的功能也比任何其它类型的
  • 【C++】赋值运算符重载的返回值分析

    转载 https blog csdn net Always article details 50532323 其实对于重载赋值运算符 返回值是引用或者不是都行 代码都可以运行 之所以用引用是为了提高代码效率 为什么引用就会提高代码效率呢 对
  • 使用docker-maven-plugin插件构建镜像并推送至私服Harbor

    前言 如下所示 建议使用 Dockerfile Maven 插件 但该插件也停止维护更新了 因此先暂时使用docker maven plugin插件 一 开启Docker服务器的远程访问 1 1 开启2375远程访问 默认的dokcer是不
  • b+树和b树的区别

    B 树和B 树是两种在数据库索引实现中经常使用的平衡树 在实际应用中被广泛采用 B 树和B 树都是基于平衡树的数据结构 用来实现数据的索引和查找 它们都支持对数据的插入 删除和查找等操作 并且可以在较短的时间内完成数据的查找和遍历等操作 但
  • 13张图,带大家深入理解Synchronized

    目录 前言 内容大纲 Synchronized使用方式 普通函数 静态函数 代码块 Synchronized原理 Synchronized优化 锁粗化 锁消除 锁升级 偏向锁 轻量级锁 重量级锁 前言 Java并发编程系列第二篇Synchr
  • “用户登录”测试用例总结

    前言 作为测试工程师 你的目标是要保证系统在各种应用场景下的功能是符合设计要求的 所以你需要考虑的测试用例就需要更多 更全面 鉴于面试中经常会问 如何测试用户登录 我们利用等价类划分 边界值分析等设计一些测试用例 显式功能性需求测试用例 1
  • 牛客网C++项目课件资料

    1 Linux系统编程入门 2 Linux多进程 3 Linux多线程 4 Linux网络编程
  • Unity3D 地形(Terrain)设置

    这篇说的是Unity地形 关于Unity3D是什么 我就不多做解释了 由于工作原因 该系列原创教程不定期更新 每月必然有更新 谢谢各位 Unity地形 新建地形 如图在菜单中新建一个地形 就会在 中看到Terrain对象 如果要修改地形参数
  • 一文读懂数据安全分级分类

    目录 为什么要分级分类 通用数据分级分类框架 数据分类 数据分类的常用方法 数据分类流程 数据分级 数据分级的常用方法 数据定级流程 行业数据安全分级分类指南 金融行业 电信行业 政务数据 健康医疗 企业实践 附录 数据分级分类大合集 为什
  • MySQL——数据类型DECIMAL用法

    DECIMAL数据类型用于要求非常高的精确度的计算中 像坐标 钱这样的数据 对于精度要求高的 可以采用decimal来进行存储 用法 DECIMAL P D P是表示有效数字数的精度 P范围为1 65 D是表示小数点后的位数 D的范围是0
  • 在线画图工具

    转自 常用9款在线作图工具 总有一款适合你 shenhangyu1989的博客 CSDN博客 在线画图 最近想在团队里使用在线作图工具 使用的在线工具的原因是 一来免得大家再安装本地软件 二来在线工具在多人共享 团队协作方面的优势更大 再者
  • Flume 学习

    开始启动flume的学习 todo
  • 提示 需要 Oracle 客户端软件 8.1.7 或更高版本 解决方案

    一 问题 1 使用第三方接口连接Oracle数据库 程序内调用接口提示 需要 Oracle 客户端软件 8 1 7 或更高版本 网上看了很多答案 依然不起效果 在公司前辈指点下 终得以找到解决办法 2 数据库 Oracle 11g 二 解决
  • HardFault_Handler异常

    Cortex M3 双堆栈指针 MSP PSP Cortex M3内核中有两个堆栈指针 MSP PSP 但任何时刻只能使用到其中一个 复位后处于线程模式特权级 默认使用MSP 通过SP访问到的是正在使用的那个指针 可以通过MSR MRS指令
  • mysqldump的备份和恢复

    1 mysqldump的简介 mysqldump工具是mysql数据库自带的 最基础的一款备份工具 它的备份过程首先是从buffer中找到需要备份的数据进行备份 如果buffer中没有 就去磁盘中数据文件查找并缓存到buffer里再进行备份
  • Leetcode 题解系列--Leetcode1 两数之和

    题目描述 两数之和 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素不能使用两遍 解题思路 解法一 直观的