两数之和:给定一个整数数组,找出其中两个数相加等于目标值

2023-11-09

题目:给定一个整数数列,找出其中和为特定值的那两个数。
你可以假设每个输入都只会有一种答案,同样的元素不能被重用。

有三种思路:
第一个思路:遍历数组i从第一个数开始,j从(i+1)开始,直到找到合适的值。这个算法的时间复杂度为O(n2),空间复杂度为O(1)。

第二个思路:在前一个算法的基础上降低时间复杂度。我们可以将数组排序,然后定义两个指针,一个指针i从左向右,另一个从j右向左。
①如果data[i]+data[j] < tager ,则++i
②如果data[i]+data[j] > tager ,则–j
③如果data[i]+data[j] > tager ,则就找到
由于排序的最佳时间复杂度为O(nlogn),两个指针的遍历时间复杂度为O(n)。所以总的时间复杂度为O(nlogn)

第三个思路这里写图片描述
希望通过O(n)的时间复杂度完成要求。
第一遍遍历:将(target-a)和i 作为键值对,存入Hash表,遍历时间复杂度为O(n),
第二遍遍历:查询在Hash表中有和当前数相同的key,每次查询时间复杂度为O(1),遍历时间复杂度为O(n),
总的时间复杂度是O(2n)。

第一种(C):
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target) {
     int *res=(int*)malloc(2*sizeof(int));
    
     for(int i=0;i<numsSize-1;i++)
         for(int j=i+1;j<numsSize;j++)
         {
             if(nums[i]+nums[j]==target)
             {
                 res[0]=i;
                 res[1]=j;
             }
         }
    
    return res;
}
第三种方法(JAVA):返回下标
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map =new HashMap();
        int []a=new int[2];
        for(int i=0;i<nums.length;i++)
        {
            map.put(target-nums[i],i);
        }
        
        for(int i=0;i<nums.length;i++)
        {
	        //可能存在一个数x,满足x*2=target,i!=map.get(nums[i])可以避免
            if(map.containsKey(nums[i])==true && i!=map.get(nums[i]))
            {
                a[0]=i < map.get(nums[i])?i:map.get(nums[i]);
                a[1]=i > map.get(nums[i])?i:map.get(nums[i]);
                break;
            }
        }
        return a;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两数之和:给定一个整数数组,找出其中两个数相加等于目标值 的相关文章

  • Java测试(7)---项目篇

    需求 项目 1 项目启动 了解项目背景 2 需求分析 功能需求 1 文件类型 支持所有文件 2 压缩文件个数 最多压缩100个文件 3 压缩大小 不超过5G 性能需求 1 压缩 解压缩文件不超过30分钟 2 安全需求 带有病毒感染的文件不能
  • 代码随想录算法训练营第四天

    LeetCode 24力扣 两两交换链表节点 采用原地交换 使用tmp节点进行交换前临时节点存储即可 三个一组 package algor trainingcamp import algor junior algor list ListNo

随机推荐

  • MIPI信号简单介绍

    1 MIPI介绍 MIPI是由ARM Nokia ST IT等公司成立的一个联盟 旨在把手机内部的接口如存储接口 显示接口 射频 基带接口等标准化 减少兼容性问题并简化设计 MIPI联盟通过不同的工作组 分别定义一系列手机内部的接口标准 如
  • 字节流与字符流的区别及相互转换

    先来看一下流的概念 在程序中所有的数据都是以流的方式进行传输或保存的 程序需要数据的时候要使用输入流读取数据 而当程序需要将一些数据保存起来的时候 就要使用输出流完成 程序中的输入输出都是以流的形式保存的 流中保存的实际上全都是字节文件 字
  • EL表达式javaweb

    一 JavaBean JavaBean是Java开发语言中一个可以重复使用的软件 它本质上就是一个Java类 为了规范 JavaBean 的开发 Sun 公司发布了 JavaBean 的规范 它要求一个标准的 JavaBean 组件需要道循
  • MeterSphere入参加密踩坑记录

    需求 应公司要求需把项目接口接入MeterSphere Jenkins部署时实现接口自动化测试 项目接口有统一加密方式 所以想写一个统一的前置脚本 减少工作量 ps 我想实现的效果是body里放明文参数 经过前置脚本操作后 把处理后的参数放
  • 如何设置Alfred的Terminal为iterm2

    按以下步骤操作即可 不需要保存 代码立即生效 将以下代码放到上图所示中 on alfred script q if application iTerm2 is running or application iTerm is running
  • Nginx添加nginx_upstream_check_module主动健康检查模块步骤

    1 进入nginx第三方模块存放目录 没有就创建 cd usr local nginx module 下载nginx upstream check module wget https codeload github com yaoweibi
  • 树莓派(Raspberry pi) 使用Pi Imager安装烧录操作系统

    树莓派 Raspberry pi 安装烧录操作系统 最好的方式 土壕的方式 是直接购买了安装好了操作系统的SD卡 拿到树莓派后的第一件事情就是安装烧录操作系统 安装的过程非常简单 在树莓派官方网站上有手把手的安装说明 英语过关的可以直接看
  • 【AI画画教程】无整合包使用LoRA和Dreambooth训练全流程详解(Linux)

    前言 本教程遵循简单原则 不使用任何民间整合包 目前很多AI画画训练整合包臃肿复杂 教程也是名词乱炖 容易对初学者造成理解误差和使用困难 因为许多整合包都依赖于sd scripts库 它自身就能支持绝大多数的训练场景 学会这个后 自己也可以
  • C语言打印9*9乘法表

    C语言9 9乘法表 2d 右对齐 2d 左对齐
  • 《Centos系统——shell脚本判断语句》

    目录 一 掌握表达式测试包括字符串测试 整数测试 文件测试及逻辑测试 1 掌握字符串测试 a 格式 b 例子 2 掌握整数测试 a 格式 b 例子 3 掌握文件测试 a 格式 opr file b 例子 4 掌握逻辑测试 多重判断 b 例子
  • 07-Redis缓存设计

    上一篇 06 Redis缓存高可用集群 1 缓存穿透 缓存穿透是指查询一个根本不存在的数据 缓存层和存储层都不会命中 通常出于容错的考虑 如果从存储层查不到数据则不写入缓存层 缓存穿透将导致不存在的数据每次请求都要到存储层去查询 失去了缓存
  • 当从 Java 进程查看时该主机的主机名称和规范名称不一致。

    查看日志发现是node27 data com 和node27不一致 sed i s data com etc sysconfig network service network restart 最后还没好 第二天我又重新设置了 vim et
  • 基于STM32CubeMX的HC-05蓝牙主从通讯

    基于STM32CubeMX的HC 05蓝牙主从通讯 开发板使用的是stm32f103c8t6 使用STM32CubeMX进行配置 实现两HC 05蓝牙之间主从通讯 HC 05蓝牙模块是主从一体的 两个HC 05之间一主一从通讯 要进入AT模
  • OpenGPT2.0笔记

    还没看完 先放上来 这个乱七八糟的草稿笔记在这就能提醒自己抓紧看 GPT Feature large transformer based language model Training objective predict the next
  • 运营入门——超级运营术

    本来这应该是一篇读书笔记 超级运营术 韩叙 他的微信公众号 运营狗工作日记 本来运营入门的书籍 预备读6本 这是第3本 之前的 全栈市场人 和 运营本源 都做了读书笔记 其实在读这本书时 读书笔记也有做 但最终发现 内容有点多 毕竟本来预计
  • C++测试一

    C 测试一 简答题 说说C和C 的区别 10分 C 从范围上基本覆盖C语言 即C 是C语言的一个超集而C语言是C 的一个子集 C语言是面向过程的编程语言 C 是面向对象的编程语言 C 支持运算符重载 C 支持友元函数 C 支持泛型编程 ne
  • 这可能是因为该站点使用过期的或不安全的 tls 安全设置_国内部分银行为兼容老旧的XP/IE6,篡改TLS协议把所有用户拖下水

    蓝点网很久前曾提到过IE浏览器安全设置问题 这个问题很可能会导致全网大多数HTTPS加密网站无法正常连接 当然该问题并不是微软导致的 而是国内多数商业银行提供的安全控件或者数字证书控件进行所谓的优化导致的 发生原因是这些控件会自动调整IE浏
  • VSCode配置并连接远程服务器 并设置免密登录

    文章目录 1 前言 PyCharm与VSCode 2 VSCode配置远程开发环境 3 VSCode配置远程免密登录 4 推荐插件 参考 1 前言 PyCharm与VSCode 最近由于许多深度学习的项目需要在服务器上跑 之前一直使用PyC
  • Redis Client Error ReplyError: DENIED Redis is running in protected mode because protected mode ...

    上次修改redis配置后 没有重启过 今天直接使用 redis server 启动抛错 Redis Client Error ReplyError DENIED Redis is running in protected mode beca
  • 两数之和:给定一个整数数组,找出其中两个数相加等于目标值

    题目 给定一个整数数列 找出其中和为特定值的那两个数 你可以假设每个输入都只会有一种答案 同样的元素不能被重用 有三种思路 第一个思路 遍历数组i从第一个数开始 j从 i 1 开始 直到找到合适的值 这个算法的时间复杂度为O n2 空间复杂