首页 > 其他分享 >LeetCode 每日一题,用 Go 实现两数之和的非暴力解法

LeetCode 每日一题,用 Go 实现两数之和的非暴力解法

时间:2024-11-04 11:48:53浏览次数:3  
标签:遍历 hashMap nums int 复杂度 Go LeetCode 两数 target

题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 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 <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案

思路

1、使用 Hash 表(Go 语言中是 map 类型)存储遍历过程中的数组元素和下标,从而避免使用 for for 两层循环的暴力解法,将时间复杂度从O(N^2)降低到O(N)。

2、指定 Hash 表的初始容量,避免运行中的内存重新分配。

解题过程

1、初始化一个空的哈希表 hashMap 来存储遍历过的数字及其索引。

2、遍历数组 nums,对于每个元素 nums[i]:

  • 计算 target-v,得到与当前元素配对的目标数字。
  • 检查这个目标数字是否已经在 hashMap 中存在:
    • 如果存在,说明找到了一对数字,它们的和等于目标值,返回它们的索引。
    • 如果不存在,将当前元素及其索引存入 hashMap。

3、如果遍历结束后没有找到任何一对数字,返回 nil。

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

Code

func toSum(nums []int, target int) []int {  
    hashMap := make(map[int]int, len(nums))  
    for k, v := range nums {  
       if p, ok := hashMap[target-v]; ok {  
          return []int{p, k}  
       }  
       hashMap[v] = k  
    }  
    return nil  
}

运行结果

image

引用:https://leetcode.cn/problems/two-sum/solutions/2976507/goyu-yan-liang-shu-zhi-he-ti-jie-by-deng-pp8x

标签:遍历,hashMap,nums,int,复杂度,Go,LeetCode,两数,target
From: https://www.cnblogs.com/denglei1024/p/18524876

相关文章

  • LeetCode题练习与总结:两整数之和--371
    一、题目描述给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。示例1:输入:a=1,b=2输出:3示例2:输入:a=2,b=3输出:5提示:-1000<=a,b<=1000二、解题思路这个问题可以通过位运算来解决。位运算中的“与”操作(&)和“异或”操作(^......
  • LeetCode题练习与总结:超级次方--372
    一、题目描述你的任务是计算 a^b 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。示例1:输入:a=2,b=[3]输出:8示例2:输入:a=2,b=[1,0]输出:1024示例3:输入:a=1,b=[4,3,3,8,5,2]输出:1示例4:输入:a=2147483647,b=[2,......
  • 【Google Cloud】专用 Google 访问通道的组成和利用方法详解
    专用Google访问通道(PrivateGoogleAccess)允许从没有外部IP的虚拟机访问GoogleCloud服务的API。本文将详细介绍此功能。什么是专用Google访问通道专用Google访问通道(PrivateGoogleAccess)是指在GoogleCloud(原称GCP)中,允许没有外部IP(公网IP)的虚拟机或本地......
  • mongodb指数汇总
    mongodb安装:安装mongodb:https://blog.csdn.net/zerochia/article/details/90767583【社区版下载地址:https://www.mongodb.com/try/download/community】安装mongodbcompress(GUI,界面操作,可以连本地mongodb,也可以连远程服务器上的mongodb):https://www.mongodb.com/try/download/com......
  • Golang new() make var []int 使用的具体区别
    一、数组和切片的初始化1var []int 格式funcmain(){ vart1[]int t1=append(t1,1) fmt.Println(t1)//正常输出1 vart11[]int t11[0]=11//panic:runtimeerror:indexoutofrange[0]withlength0 fmt.Println(t11) vart12[1]int t12[0]=......
  • 本地uni-app链接阿里云esc实例上的mongo
    1.准备工作1.1获取阿里云ESC实例推荐使用阿里云ESC,因为可以免费试用很爽阿里云试用<—点我跳转阿里云确保实例已预装MongoDB<—点我看怎么安装1.2连接到ESC实例这里参考阿里云自带的文档们阿里云ESC文档<–点这里看文档给esc开3000端口<–点击看如何开端口开出方......
  • 2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice 和 Bob 正在进行一个有 n 个关
    2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice和Bob正在进行一个有n个关卡的游戏,其中每个关卡要么是困难模式(possible[i]==0),要么是简单模式(possible[i]==1)。玩家在游戏中获得分数的规则如下:通过简单模式的关卡可得1分,而遇到困难模式的关卡将扣除1分。Alice从......
  • (开题报告)django+vue面向高铁的旅客点餐系统与实现论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于高铁旅客点餐系统的研究,现有研究主要以传统点餐模式或通用点餐系统为主,专门针对高铁场景下结合django+vue技术构建旅客点餐系统......