力扣 - 1、俩数之和

2023-11-14

题目

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]

提示:
2 <= nums.length <= 103
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum

分析

方法一 暴力求解
双层循环,成立条件i != j && nums[i] + nums[j] == target 创建一个用于存储记录下标的数组。

C:

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int *tmp = (int*)malloc(2 * sizeof(int));//创建存放返回值的空间
    for(int i = 0; i < numsSize; i++)
    {
        for(int j = i + 1; j < numsSize; j++)
        {
            if(nums[i] + nums[j] == target)
            {
                tmp[0] = i;
                tmp[1] = j;
                *returnSize = 2;//返回2个
                return tmp;
            }
        }
    }
    *returnSize = 0;//返回0个
    return tmp;
}

C++:

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

JAVA:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int len = nums.length;
        for(int i = 0; i < len; i++)
        {
            for(int j = i + 1; j < len; j++)
            {
                 if(nums[i] + nums[j] == target)
                {
                   return new int[]{i, j};//创建匿名数组
                }
            }
        }
        return new int[0];//返回空数组
    }
}

复杂度分析
时间复杂度:O(N^2),其中 N 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。
空间复杂度:O(1)。

方法二 哈希表查找

用哈希表<值,下标>来倒着存放。
如果不考虑有俩相同的元素,我们可以用map或者unordered_map这种不重复的map容器。
先构造哈希表,然后一次遍历查找就可以了。如下:
C++:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> hashmap;//提供一对一的hash
        vector<int> tmp;//存放返回值

        for(int i = 0; i < nums.size(); i++)//构造哈希表
        {
            hashmap.push_back(pair<int, int>(nums[i], i));
            //反过来放入map中,用来获取结果下标
        }
    
        for(int i = 0; i < nums.size(); i++)//查找
        {
            if(a.count(target-nums[i]) > 0)
            {//nums[i]还未存入哈希表中,如果表中有另一半直接跳出
                b.push_back(a[target - nums[i]]);
                b.push_back(i);
                break;
            }
        }
        return b;
    };
};

但是碰到用例输入:nums = [3,3], target = 6 输出:[0,1] 就会出现问题,因为map不允许有重复的key值元素,所以我们可以先判断然后根据结果来确定是返回,还是存放入哈希表中。
C++:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> hashmap;//提供一对一的hash
        vector<int> tmp;//存放返回值
    
        for(int i = 0; i < nums.size(); i++)//查找
        {
            if(hashmap.count(target-nums[i]) > 0)
            {//nums[i]还未存入哈希表中,如果表中有另一半直接跳出
                tmp.push_back(hashmap[target - nums[i]]);
                tmp.push_back(i);
                break;
            }
            hashmap.insert(pair<int, int>(nums[i], i));
            //反过来放入map中,用来获取结果下标
        }
        return tmp;
    };
};

JAVA:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int len = nums.length;
        HashMap<Integer,Integer> hashmap = new HashMap<>();

        for(int i = 0; i < len; i++)//查找
        {
            if(hashmap.containsKey(target-nums[i]))
            {//nums[i]还未存入哈希表中,如果表中有另一半直接跳出
                return new int[]{i,hashmap.get(target-nums[i])};
            }
            hashmap.put(nums[i], i);
            //反过来放入map中,用来获取结果下标
        }
        return new int[0];
    }
}

本章完

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

力扣 - 1、俩数之和 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • ctfhub技能树部分wp(潦草笔记)

    备份文件下载 vim缓存 在使用vim时会创建临时缓存文件 关闭vim时缓存文件则会被删除 当vim异常退出后 因为未处理缓存文件 导致可以通过缓存文件恢复原始文件内容 隐藏文件index php swp前加 以 index php 为例
  • 仿牛客网项目第三章:开发社区核心功能(详细步骤和思路)

    目录 1 过滤敏感词 1 1 目的 1 2 实现方法 1 3 前缀树 1 4 敏感词过滤步骤 为发帖子做准备 2 发布帖子 2 1 AJAX介绍 2 2 AJAX使用实例 3 帖子详情 3 1 实现功能 3 2 实现过程 4 事务管理 4
  • little endian && big-endian

    java 的ClassFile采用big endian存储数据 Intel x86 采用little endian Motorola采用big endian 0x1234 Intel 地址 0x4000 0000 0x34 0x4000 0
  • vue-使用sass定义全局样式及变量

    vue cli2使用sass定义全局样式及变量 vue cli2创建的vue项目使用sass预处理器需按顺序安装以下插件 其中sass loader版本和node sass需要安装固定版本 其他的依赖不要求版本 亲测有效 如果不不固定sas
  • unity Domain Reload & scene Reload 静态变量重置

    关闭 Domain Reload 选项后 c 的静态变量在下次运行时不会怎么重置 需要手动添加重置代码 使用下面的属性设置重置变量函数 using UnityEngine public class StaticCounterExampleF
  • ns.ajax,UIWebView使用NSURLProtocol(拦截),ajax加载失败的问题

    问题 ajax跨域访问是一个老问题了 解决方法很多 比较常用的是JSONP方法 JSONP方法是一种非官方方法 而且这种方法只支持GET方式 不如POST方式安全 即使使用jquery的jsonp方法 type设为POST 也会自动变为GE
  • 解决eclipse新建dynamic web project没有apache的Runtime environment问题

    在新建eclipse web项目时候 想选择Tomact服务器 不过运行时环境选择中没有 没有出现下图的Apache目录吗 网络上好像没有找到教程 其实很简单 只是没有装上相应的插件 解决步骤如下 1 打开Help gt Install N
  • ThinkPad BIOS 设置详解

    ThinkPad BIOS 设置详解 ThinkPad BIOS 设置详解 主流 新机型 在网上查看了相关资料 发现好多都是T40或者更老的BIOS设置信息 不适合现在的主流以及新机型 于是找到分享该贴 希望对各位有所帮助 简洁的分割线 T
  • Python-错误与异常处理

    通常情况下 在try语句块中写我们想要的逻辑 发生错误和异常时Python解释器会采用raise方法即将异常抛出 except语句可以承接raise方法抛出的异常并对异常做出处理 Python中有三种异常捕获与处理形式 第一种 try ex
  • 为什么MySQL字符串不加引号索引失效?《死磕MySQL系列 十一》

    群里一个小伙伴在问为什么MySQL字符串不加单引号会导致索引失效 这个问题估计很多人都知道答案 没错 是因为MySQL内部进行了隐式转换 本期文章就聊聊什么是隐式转换 为什么会发生隐式转换 文章目录 系列文章 一 几大索引失效原因 二 从规
  • 解决git中文乱码

    1 配置git bash idea 随便找地方打开git bash 右击窗口进入options 分别将text选项的Locale改为zh CN character set改为UTF 8 如图所示 2 命令执行 我改了这个就好了 如果不行 在
  • C++基础知识(二)

    C 基础知识 二 文章目录 C 基础知识 二 1 指针与引用 2 日期与时间 3 cerr与clog 1 指针与引用 C 有两种指针运算符 一种是取地址运算符 另一种是间接寻址运算符 它们都是单目运算符 返回操作数的内存地址 如 var读作
  • Vulkan【15】图形管线(Graphics Pipline)

    创建图形管线 本节的代码是 14 init pipeline cpp 你越来越接近把这些拉到一起来渲染一个立方体 下一步是通过设置图形管道来配置GPU来进行渲染 一个图形管线由着色阶段 管线布局 渲染过程和固定功能管线阶段组成 您在前面的部
  • 一个栈的入栈序列是 a,b,c,d,e,则栈的不可能的输出序列是( ) 。

    一个栈的入栈序列是 a b c d e 则栈的不可能的输出序列是 a edcba b decbac dceab d abcde 堆栈讲究先进后出 后进先出 选项1是abcde先入栈 然后依次出栈 正好是edcba 选项2是abcd先依次入栈
  • python 数据清洗 豆瓣电影_python 数据清洗篇

    前面我们用pandas做了一些基本的操作 接下来进一步了解数据的操作 数据清洗一直是数据分析中极为重要的一个环节 本篇主要演示 python 数据清洗的数据合并 转换 过滤 排序 数据合并 在pandas中可以通过merge对数据进行合并操
  • 【Python搞搞轻量Blog】第一发 Flask入门

    我发现很多小伙伴一直想着有自己的一个博客 而且还想自己写一个 你们都这么爱折腾 我就给你们搞一个轻量级级别的Blog 准备 我们要用Python来写一套轻量级的博客 那么必须要有Python方面的基础 如果有HTML和CSS的基础食用更佳
  • Ren'Py引擎源代码解读(1)——脚本文件加载

    因为想要尝试把Ren Py移植到Cocos上 尽可能的使用原来的rpy文件 这就难免要解析rpy文件 因此就参考了一下Ren Py自己是怎么解析脚本的 文件加载 那么从哪里看起呢 先简要看一下Ren Py的启动过程 启动脚本肯定是根目录下的
  • 1.1.3 Hadoop生态系统

    1 1 3 Hadoop生态系统 2013 05 08 09 38 16 我来说两句 收藏 我要投稿 本文所属图书 gt Hadoop技术内幕 深入解析Hadoop Common和HDFS架构设计与实现原理 Hadoop技术内幕共两册 分别
  • CDMA 猫用AT命令发中文短信(C#)

    CDMA猫连PDU都不支持 只能发文本短信 而且发中文短信居然是UNICODE 无法在超级终端里输入 只能写程序 网上这个问题谈论地比较多 做起来比较累 还偶尔会出乱码 还是将C 的成功代码帖一下吧 void SendCHNSms stri
  • 力扣 - 1、俩数之和

    题目 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不能重复出现 你可以按任意顺序返回答